【发布时间】: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