我正在尝试创建一个具有单个服务器和多个客户端的网络架构。客户端可以随时连接和断开连接,因此需要宣布它们的存在或关闭到服务器。服务器必须能够将数据发送到任何特定客户端。
用于此目的的最佳可扩展性协议/架构是什么?
目前,我使用 REQ
/ REP
,以便客户可以登录'和'注销'以及 SURVEY
套接字,以便服务器可以向所有客户端发送数据。发送的消息具有其要处理消息的特定客户端的ID。
这样好,还是有更好的东西?
答案 0 :(得分:2)
听起来更像是需要发布商订阅者。使用0MQ和nanomsg,您不需要做任何特别的事情来管理连接/断开连接,库就可以为您完成。
但是,如果您想要更复杂的邮件管理(例如缓存外发邮件以防其他客户选择连接),那么您必须自己管理。您可以使用来自客户端的单个推送来宣布它们的存在(它们会发送一条消息说明它们是谁),然后从服务器向每个客户端发送更多的推送来从缓存中发送消息你有。很烦人,但仍然比使用原始套接字编程容易得多。
使用req rep可能会出现问题 - 如果任一端崩溃或意外断开连接,则另一端可能处于停滞,不可恢复的状态。
答案 1 :(得分:2)
还有许多影响建筑的方面 - 大图片。
虽然Martin SUSTRIK都很酷的孩子 - ZeroMQ
& nanomsg
- 在提供优质基础+可扩展正式通信模式的乐高类型构建模块方面做了大量帮助,它们只是开头并且说REQ/REP
或{ {1}}行为基元(伟大的创新,但仍然是一个构建块) 架构 会让几乎所有的建筑师和布道者感到沮丧。
最初的问题很重要,但是你已经有了第一个提议让它在行政上被关闭,因为有些“更宽翼展”的人觉得你的问题“太宽泛”或“意见” - 取而代之的是一个MCVE代码示例驱动( ...是的,StackOverflow生活有时是快而残忍的)。
因此,如果没有任何进一步的详细信息,我的建议是检查 SURVEY
的最新版本(可以并且可以过滤 PUB/SUB
-side(不是PUB
和早期ZeroMQ版本中的设计一样,曾经在世界范围内已经xmited /交付了数以万计的字节,只是在全球分布的同级层面上实现,但是还没有人{{1} 1}} - 用来接收任何内容而不是提到的SUB
。
没有任何背景,认真判断是无稽之谈,改善你设计和实施的内容就越少。
我会做一个糟糕的服务,我试图这样做。
What I can do for you right now is to direct you to see a bigger picture on this subject >>>,一个简单的信号平面/消息平面插图以及一个指向必读书籍的直接链接Pieter HINTJENS 。