Discussion:
[問題] 想問有沒有比較好的設計方法
(时间太久无法回复)
肚子餓
2007-02-15 16:07:51 UTC
Permalink
各位高手好,最近想要寫一個client/server架構的程式,目前還在設計的階段,

想上來問一下有沒有比較好的設計方法,或是有類似的範例可以參考

如果不能問這類問題的話,我會自d

目前要寫的程式有點像是bt的樣子,假如現在有很多的server,例如s1、s2、s3…

我的client只要和其中的一個server連線,例如s1,s1就會把client的要求送到其他的

s2、s3…,之後s2、s3…又會把結果送回到s1,s1再一次把所有的結果回傳給client


目前想到的做法一是:
當client連到s1後,s1有implement cloneable和runnable,所以可以拷貝本身在一個
thread上執行,在這個thread上再開一個socket來linsten由s2、s3…所回傳的結果,
可是這樣好像會開很多個socket且還要再把port的資訊送到s2、s3…


想法二:
在s1上建二個socket,一個負責listen由client來的要求,另一個負責listen s2、s3…
所回傳的結果,這樣一來,若有多個client的時候,就無法分辨s2、s3…所回傳的結果
是屬於那個client


有沒有人有更好的設計方式,謝謝





--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 220.140.62.76
骨頭
2007-02-15 16:18:42 UTC
Permalink
※ 引述《ogre0403 (肚子餓)》之銘言:
: 各位高手好,最近想要寫一個client/server架構的程式,目前還在設計的階段,
: 想上來問一下有沒有比較好的設計方法,或是有類似的範例可以參考
: 如果不能問這類問題的話,我會自d
: 目前要寫的程式有點像是bt的樣子,假如現在有很多的server,例如s1、s2、s3…
: 我的client只要和其中的一個server連線,例如s1,s1就會把client的要求送到其他的
: s2、s3…,之後s2、s3…又會把結果送回到s1,s1再一次把所有的結果回傳給client
: 目前想到的做法一是:
: 當client連到s1後,s1有implement cloneable和runnable,所以可以拷貝本身在一個
: thread上執行,在這個thread上再開一個socket來linsten由s2、s3…所回傳的結果,
: 可是這樣好像會開很多個socket且還要再把port的資訊送到s2、s3…
: 想法二:
: 在s1上建二個socket,一個負責listen由client來的要求,另一個負責listen s2、s3…
: 所回傳的結果,這樣一來,若有多個client的時候,就無法分辨s2、s3…所回傳的結果
: 是屬於那個client
: 有沒有人有更好的設計方式,謝謝

你的需求聽起來像是適合用觀察者模式來處理的問題。:p

否則也可以考慮用責任鏈的方式,只是個建議~

--
 String temp="relax"; | Life just like programing
 while(buringlife) String.forgot(temp); | to be right or wrong
 while(sleeping) brain.setMemoryOut(); | need not to say
 stack.push(life.running); | the complier will
 stack.push(scouting.buck()); | answer your life
 stack.push(bowling.practice()); | Bone everything

--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 220.134.27.68
.
2007-02-15 16:19:35 UTC
Permalink
※ 引述《ogre0403 (肚子餓)》之銘言:
: 各位高手好,最近想要寫一個client/server架構的程式,目前還在設計的階段,
: 想上來問一下有沒有比較好的設計方法,或是有類似的範例可以參考
: 如果不能問這類問題的話,我會自d
: 目前要寫的程式有點像是bt的樣子,假如現在有很多的server,例如s1、s2、s3…
: 我的client只要和其中的一個server連線,例如s1,s1就會把client的要求送到其他的
: s2、s3…,之後s2、s3…又會把結果送回到s1,s1再一次把所有的結果回傳給client
: 目前想到的做法一是:
: 當client連到s1後,s1有implement cloneable和runnable,所以可以拷貝本身在一個
: thread上執行,在這個thread上再開一個socket來linsten由s2、s3…所回傳的結果,
: 可是這樣好像會開很多個socket且還要再把port的資訊送到s2、s3…
: 想法二:
: 在s1上建二個socket,一個負責listen由client來的要求,另一個負責listen s2、s3…
: 所回傳的結果,這樣一來,若有多個client的時候,就無法分辨s2、s3…所回傳的結果
: 是屬於那個client
: 有沒有人有更好的設計方式,謝謝
其實我覺得關鍵是在於你每台server存放的資料為何
若每台的資料都一樣或差不多,多伺服器是為了增加處理效率的話,
可以考慮google的「Map/Reduce」設計方式
而如果多伺服器是為了分散風險的話,也許可以試試「DHT」

引號內是關鍵字,google一下應該會有資料
這個問題我也想過,但一時沒有實作出來,還請大家不吝指教

--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 61.228.207.158
肚子餓
2007-02-15 17:06:30 UTC
Permalink
※ 引述《sniffing (.)》之銘言:
: ※ 引述《ogre0403 (肚子餓)》之銘言:
: : 各位高手好,最近想要寫一個client/server架構的程式,目前還在設計的階段,
: : 想上來問一下有沒有比較好的設計方法,或是有類似的範例可以參考
: : 如果不能問這類問題的話,我會自d
: : 目前要寫的程式有點像是bt的樣子,假如現在有很多的server,例如s1、s2、s3…
: : 我的client只要和其中的一個server連線,例如s1,s1就會把client的要求送到其他的
: : s2、s3…,之後s2、s3…又會把結果送回到s1,s1再一次把所有的結果回傳給client
: : 目前想到的做法一是:
: : 當client連到s1後,s1有implement cloneable和runnable,所以可以拷貝本身在一個
: : thread上執行,在這個thread上再開一個socket來linsten由s2、s3…所回傳的結果,
: : 可是這樣好像會開很多個socket且還要再把port的資訊送到s2、s3…
: : 想法二:
: : 在s1上建二個socket,一個負責listen由client來的要求,另一個負責listen s2、s3…
: : 所回傳的結果,這樣一來,若有多個client的時候,就無法分辨s2、s3…所回傳的結果
: : 是屬於那個client
: : 有沒有人有更好的設計方式,謝謝
: 其實我覺得關鍵是在於你每台server存放的資料為何
: 若每台的資料都一樣或差不多,多伺服器是為了增加處理效率的話,
: 可以考慮google的「Map/Reduce」設計方式
: 而如果多伺服器是為了分散風險的話,也許可以試試「DHT」
: 引號內是關鍵字,google一下應該會有資料
: 這個問題我也想過,但一時沒有實作出來,還請大家不吝指教

嚴格說起來,我想的這個問題應該是為了transparency,剛剛的敘述可能有點不足

我再補充二句好了,s1可以把要求送到s2和s3,可是另外有s4、s5…,但是s1完全

不知道s4和s5的存在,可能只有s3知道s4,s2知道s5,當s1送要求給s2和s3後,s2

會再送給s5,s3會送給s4,最後s2、s3、s4、s5都會把結果送給s1,這樣s1可以在

不知道s4和s5的情況下得到大家的資訊,

謝謝你的回應,我會去google一下




--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 220.140.62.76
徵愛好人的女生
2007-02-17 03:54:07 UTC
Permalink
※ 引述《ogre0403 (肚子餓)》之銘言:
: ※ 引述《sniffing (.)》之銘言:
: : 引號內是關鍵字,google一下應該會有資料
: : 這個問題我也想過,但一時沒有實作出來,還請大家不吝指教
: 嚴格說起來,我想的這個問題應該是為了transparency,剛剛的敘述可能有點不足
: 我再補充二句好了,s1可以把要求送到s2和s3,可是另外有s4、s5…,但是s1完全
: 不知道s4和s5的存在,可能只有s3知道s4,s2知道s5,當s1送要求給s2和s3後,s2
: 會再送給s5,s3會送給s4,最後s2、s3、s4、s5都會把結果送給s1,這樣s1可以在
: 不知道s4和s5的情況下得到大家的資訊,
: 謝謝你的回應,我會去google一下

我怎麼看都覺得,這好像是病毒= =

你想要的作法就有點像是 "通訊錄"

E-mail的病毒不就是這樣的傳播方式嗎?

這樣一來,你傳送除了原本的資料之外

還要讓程式啟動比照的功能

簡易的方式就是

s1->s2 送到資料時去比對名單然後再發送出去

不過這樣的做法缺點就是如果很多人都有s1

s1就會收到多重的資料

不然就是把名單傳回server做比對

要是有重復就不要傳送,要是沒有就儲存新名單外加傳送....

但這樣做好像就偏題了XD

--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 61.61.163.247

Loading...