作者pao0111 (Pao)
看板java
标题Re: [问题] 关於thread间交换讯息的问题
时间Wed Oct 25 20:14:48 2006
※ 引述《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