【问题标题】:Nodejs: many clients requests through one socketNodejs:许多客户端通过一个套接字请求
【发布时间】:2011-08-26 16:31:32
【问题描述】:

场景:我有许多连接到 Node.js 服务器(称为 A)的客户端(网页,通过 Socket.io)。对于这些客户端,服务器充当另一个服务(Node.js)的应用程序“代理”,我们称之为服务 B。实际上,页面使用代理与服务 B 对话。 我试图了解我是否可以只从服务器 A 到服务 B 使用一个打开的套接字,只是为了获得性能和资源(在服务器 A 上的第一个客户端连接上,服务器将打开到 B 的套接字并维护它打开消息双向流动)。 当然,问题是如果没有某种干预,消息可能会一个接一个地打乱,导致服务 B 无法理解的混乱。 我是套接字编程的新手,我想知道这是否是一个“已解决”的问题,或者只是问题的错误答案:) 谢谢

【问题讨论】:

  • 我会用 \n 分隔消息,然后在 B 上循环 .split("\n")...
  • 这真的取决于你如何代理从 A 到 B 的请求。你能发布一些示例代码吗?
  • Ehi Rob,这真的很简单:A 和 B 通过 TCP 套接字进行通信,因此它们共享一个数据流,来自客户端的消息和来自 B 的相关答案在其中流动。问题是流中的消息必须被“封装”,分组化。我现在使用一个简单的“\n”分隔的“协议”然后......它似乎工作
  • 啊,好的。我现在明白了,但我很好奇为什么你在 TCP 上“推出你自己的”协议而不是使用更高级别的协议(如 HTTP REST)?使用原始 TCP 连接,如果您发送的消息必须分成多个数据包(您无法控制的过程),您的服务器将收到多个“数据”事件,并且必须重建消息.
  • 是的,我确实害怕碎片。 HTTP 的问题在于服务 (B) 也会(主动)向客户端发送消息。一些命令式和异步的(如有必要,也进行广播)。将服务视为咀嚼数据并根据数据做出决策的“大脑”。相当复杂:/

标签: sockets networking proxy node.js


【解决方案1】:

从您的 cmets 看来,您似乎会从 Redis 的 PubSub 之类的东西中受益。

请参阅http://redis.io/,特别是http://redis.io/commands#pubsub

【讨论】:

  • 我接受这个答案,因为我已经在我的另一个项目中使用了 Redis pub/sub,我可能也会在这个项目中使用它。 (已经在考虑了)。谢谢你:)
猜你喜欢
  • 2012-10-27
  • 2014-09-12
  • 1970-01-01
  • 2019-11-19
  • 2014-11-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多