Re: [問題] 關於thread間交換訊息的問題
※ 引述《michaelz (michaelz)》之銘言:
: 我想做一個類似聊天室的程式, 有一個server負責listen,當有client連線進來時
: 就分一個thread去處理. 如何讓一個client的訊息可以送到其他所有的client呢
: 另外server也可能有幾個物件會要送到所有的client.
: 聊天室的部分目前想到是設一個static的物件然後所有的client定時去讀再判斷有沒改變
: 至於 server那部現在還想不到..請問有什麼好的方法嗎?..thx
如果不考慮效率還是有的沒的、雜七雜八的話。
我的偷懶方式如下:
使用簡單的Socket去作。
Server負責分派每個Client一個Thread去服務。
同時也將每個Thread放進List裡面,傳給新分派的Thread。
(當然這些Thread是要被繼承過的,得以增加功能)
而每個Thread的工作就是聆聽該client的傳來訊息,
此時Thread當然是被阻斷(Block)在該輸入資料流。
每個Thread要有公開的方法可以讓其他Thread呼叫,
此方法即為傳送訊息到該Client,姑且叫它send方法吧。
然後當某Thread收到訊息時,就呼叫List裡面,每個Thread的send方法。
也就是說收到訊息的Thread,要負責把訊息傳到每個Client去。
過程發現不能傳表示該Client斷線,要順便把該Thread從List移除。
當然某Thread自己發現對方斷線,也要順便把自己從List裡移除。
而這些像send方法、List的新增、刪除等,都要同步化。
不然可能會有某些詭異的事情發生...囧
(當然同步化的競爭,會讓效率降低,不過聊天室應該沒關係吧...^^")
以上是小弟我懶惰的方法,希望會有幫助...
有錯還是有疏忽,還請各位高手糾正及補充...^^"
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 59.113.65.151
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 4 之 4 篇):