我正在编写一个接受来自多个客户端的连接的TCP服务器,该服务器从正在运行的系统收集数据并将其传输到每个连接的客户端。
哪种设计模式最适合这种情况?
实施例 将所有连接放在一个数组中,然后遍历该数组并将数据逐个发送到每个客户端。优点:非常容易实现。缺点:处理大量数据时效率不高。
答案 0 :(得分:0)
更简单的方法是使用一些现有软件来执行此操作...例如,使用https://www.ibm.com/developerworks/community/groups/service/html/communityview?communityUuid=d5bedadd-e46f-4c97-af89-22d65ffee070。
如果您想自己编写,则需要一个列表(链表)来管理连接。
以下是服务器http://examples.oreilly.com/jenut/Server.java
的示例如果要处理大量数据,其中一种技术是将一个队列与服务器端的每个订户相关联。多线程程序可以从这些队列将数据发送到客户端。
答案 1 :(得分:0)
已经为分布式处理和服务器开发了许多模式,例如在ACE项目中:http://www.cs.wustl.edu/~schmidt/patterns-ace.html。设计可能集中于宣布已接收和可能已读取数据的事件,或者已清空缓冲区并且现在可以写入更多数据的事件。至少在32位地址空间是规则的日子里,你可以拥有比线程更多的开放连接,所以你通常会有少量线程等待事件,宣布他们可以安全地读或写没有停止,直到另一方合作。这可能来自事件,也可能来自select()或poll()等终止的调用。模式也与http://zguide.zeromq.org/page:all#-MQ-in-a-Hundred-Words相关联。