Sockets Nodejs:许多客户端通过一个套接字请求

Sockets Nodejs:许多客户端通过一个套接字请求,sockets,networking,proxy,node.js,Sockets,Networking,Proxy,Node.js,场景:我有很多客户端(网页,通过Socket.io)连接到Node.js服务器(称之为a)。服务器充当这些客户端的另一个服务(Node.js)的应用程序“代理”,让我们调用服务B。实际上,页面使用代理与服务B对话。 我试图理解我是否可以从服务器A到服务B只打开一个套接字,以获得性能和资源(在服务器A上的第一个客户端连接上,服务器将向B打开套接字,并保持其打开状态,以便消息双向流动)。 当然,问题是如果没有某种干预,消息可能会被一个消息打乱,导致服务B无法理解的混乱。 我是一个套接字编程新手,我想

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

从你的评论来看,你似乎会从Redis'PubSub之类的东西中受益


具体地说,从您的评论来看,您可能会从Redis的PubSub中获益


具体地说,请参见,

我将使用a\n分隔消息,然后在B上循环使用a.split(“\n”)…这实际上取决于您将请求从a代理到B的方式。您可以发布一些示例代码吗?呃,Rob,非常简单:a和B通过TCP套接字进行通信,因此,它们共享一个数据流,其中来自客户机的消息和来自B的相关答案在其中流动。问题是流中的消息必须被“封装”,分组化。我现在使用一个简单的“\n”分隔的“协议”,然后。。。看起来不错啊,好吧。我现在明白了,但我很好奇为什么您在TCP上“滚动您自己的”协议,而不是使用更高级别的协议(如HTTP REST)?使用原始TCP连接,如果您发送的消息必须分为多个数据包(您无法控制的进程),您的服务器将接收多个“数据”事件,并且必须重新构建消息。是的,我确实担心这些碎片。HTTP的问题是服务(B)也会(主动地)向客户端发送消息。必要且异步的东西(必要时也可以广播)。把服务想象成一个“大脑”,它咀嚼数据并根据数据做出决策。相当复杂:/I我会用a\n分隔消息,然后在B上循环使用a.split(“\n”)…这实际上取决于您将请求从a代理到B的方式。您可以发布一些示例代码吗?呃,Rob,非常简单:a和B通过TCP套接字进行通信,因此,它们共享一个数据流,其中来自客户机的消息和来自B的相关答案在其中流动。问题是流中的消息必须被“封装”,分组化。我现在使用一个简单的“\n”分隔的“协议”,然后。。。看起来不错啊,好吧。我现在明白了,但我很好奇为什么您在TCP上“滚动您自己的”协议,而不是使用更高级别的协议(如HTTP REST)?使用原始TCP连接,如果您发送的消息必须分为多个数据包(您无法控制的进程),您的服务器将接收多个“数据”事件,并且必须重新构建消息。是的,我确实担心这些碎片。HTTP的问题是服务(B)也会(主动地)向客户端发送消息。必要且异步的东西(必要时也可以广播)。把服务想象成一个“大脑”,它咀嚼数据并根据数据做出决策。相当复杂:/我接受这个答案,因为我已经在我的另一个项目中使用了Redis pub/sub,我可能也会在这个项目中使用它。(已经在考虑了)。谢谢:)我接受这个答案,因为我已经在我的另一个项目中使用了Redis pub/sub,我可能也会在这个项目中使用它。(已经在考虑了)。谢谢:)