全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:1309
推到 Plurk!
推到 Facebook!

聊天室設定的問題

答題得分者是:暗黑破壞神
Teresa_Chang
一般會員


發表:41
回覆:42
積分:16
註冊:2004-05-04

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-11-05 17:58:28 IP:211.74.xxx.xxx 未訂閱
在網路上看到用BCB寫聊天室的方法中, ServerSocket屬性threadcachsize是設線程中的最大數目, 請問如果是設3,第4個client端要求時,會產生何種訊息, 而且,3個client端再要求時,會有資料碰撞產生miss的情況嗎?
暗黑破壞神
版主


發表:9
回覆:2301
積分:1627
註冊:2004-10-04

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-11-09 12:18:06 IP:221.169.xxx.xxx 未訂閱
其實。妳想玩SOCKET這個東西。我比較建議妳先去看過TCPIP的文件。 妳就會發現妳所問的問題很”怪”。 用現實來解說TCPIP好了。 我們把兩台電腦。當成是兩棟公庽。而這兩個公寓之間有一條電話線連著。 而每一間公寓有六萬多個分機 試問。你要怎麼讓兩個公寓中的使用者可以利用這唯一的一條線來同時通訊呢? 你是不是要用到時間切割?那這就是一個一個的封包切割囉。 所以。假設A樓A房要跟B樓B房通話。那就要在封包中註明。這個封包是由我A樓A房。傳給B樓B房。所以可以跟不同的房間做區隔。就不會互相打架了。對不對? 而妳的問題在於。它們會不會互相干擾? 那我們就可以看到。如果B樓B房中住了三個人。而妳要打電話進去。 是不是就打到B樓B房?可是這時候。B樓B房的這個”電話”是不是就會被妳佔著了?別人就打不進來了? 所以。我們有一個動作,就是,當妳打電話進去時。妳是打到B樓B房。可是對方接到妳的來電時。 他會看一下有沒有空的房間。。。。比方說Z房是空著。他會跟妳說。嗯。B房的電話必須空出來。所以我到Z房跟妳聊天。(這就是TCPIP在開始”握手”要做的事情。把LISTEN 的PORT空出來給再來要CONNECT的CLIENT用) 現在。我們再回到現實狀況來看妳的程式。 妳都知道會開thread出來處理所接到的CLIENT了。 那我們用比較粗的說法。每一個THREAD就是一個小小的獨立程式。 而這個程式是由主程式所產生。 這個主程式在接到客人(client call in)時。就會跟客人橋好。對方跟我再來要用那個PORT跟對方溝通。 所以在這個小程式中不會跟大架構相衝突。 詳細請看TCPIP。大約的程序是這樣。 client 取一個沒人用的 port (ex.2000) 跟你的 irc server port (ex 6667) connect server port 6667 accept 一個連線 然後找一個空的 port (ex. 4637 '系統會自己找') 通知cleint 下次我跟你通訊用 port 4637 client 改由 port 2000 <----> server port 4637 做連線。 而 server 端因為妳做了 thread 所以在那個 thread 中。妳只要管好 port 2000 <---> port 4637 這條連線的內容就好了。 就不用去管其它的連線內容了。 這樣清楚嗎? 我想,妳再來會問說。那這些 client 之間要互傳訊息怎麼做? 簡單的方法就是宣告一個外部 link list 而所有的 thread 去對 link list 做 maintain 的動作。就有些像 window 做 message 傳送一樣。 這樣就可以做到妳要做的聊天室功能了。
Teresa_Chang
一般會員


發表:41
回覆:42
積分:16
註冊:2004-05-04

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-11-13 11:30:03 IP:220.137.xxx.xxx 未訂閱
那你的意思是說,threadcachsize設定的數目, 和這個程式其實是沒有關係的嗎? 還是說如果設3的話,最多server只會和3個client端hand shake的動作呢? 另外一個問題也很困擾我,那這種方式和利用multithread的方式又有什麼不同呢? 謝謝~~
暗黑破壞神
版主


發表:9
回覆:2301
積分:1627
註冊:2004-10-04

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-11-13 17:06:22 IP:221.169.xxx.xxx 未訂閱
妳可以按一下 TServerSocket 的 help 出來看啊。
Specifies the maximum number of threads that can be reused for new client connections.    __property int ThreadCacheSize = {read=FThreadCacheSize, write=SetThreadCacheSize, nodefault};    Description     When ServerType is stThreadBlocking, each new connection that is accepted by the server socket is given a separate execution thread. In order to improve performance, server sockets store these threads in a cache rather than freeing them when the connection is closed. New connections can then reuse threads from the cache, rather than requiring the socket server to create a new thread every time a connection is accepted.    Set ThreadCacheSize to specify the number of threads that are cached for re-use. The ideal value for ThreadCacheSize depends on the number and frequency of client socket requests received by the server socket. If ThreadCacheSize is too low, the server socket will spend more time freeing and creating threads when client connections are accepted. If ThreadCacheSize is too high, the server socket may unnecessarily lock up the memory for threads that are never reused.
第二段說得很清楚了啊。 Set ThreadCacheSize to ........for re-use. 所以我不清楚妳的問題在那邊呢? 你如果懷疑只有3個CLIENT可以連。那你就自己用 TELNET HOSTNAME PORT 連個四個,不就知道能不能有第四個連線了??? try it. and you will got answer.
系統時間:2024-05-19 3:11:16
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!