【发布时间】:2009-07-20 04:01:04
【问题描述】:
我正在编写一个基于 java 的聊天服务器,目前我的设计基于以下内容:- 当聊天室中的人发送消息时,服务器端的聊天室类会循环向房间中的每个参与者发送相同的消息。显然,这是一个糟糕的设计,因为网络调用是在循环中对单个参与者进行的。因此,例如,假设聊天室中有 10 个人。当一个用户发送消息时,聊天室类将循环发送相同的消息给所有 10 个人。如果说,循环中的第 5 个人的连接很糟糕,那么第 6 .. 10 个人看到消息的时间会受到影响。
如果我从每个房间的单播转移到多播,那么我如何获得每个聊天室的私有多播组 ip?此外,每个聊天室都有单独的组似乎有点过头了。 主要问题之一是当我通过循环回复房间中的用户时,通过套接字连接发送数据的方法被阻塞。因此,我在想如果我使用非阻塞 NIO 套接字,然后将消息循环发送给收件人,那会解决问题吗? 是否有其他巧妙的技巧可以优化将数据发送给房间内的接收者?
【问题讨论】:
-
试着把它分成几段,以便人们阅读。
标签: java networking network-programming chat