我想通过HTTP连接在Node.JS客户端和Node.JS服务器之间创建双向流。但似乎在客户端调用request
之前不会调用服务器的req.end()
事件。如何建立双向通信?我需要使用单独的请求吗?
澄清:我的期望是
是可能的编辑:好的,这是选项摘要:
单独端口上的TCP套接字:如果您不介意打开单独的端口,然后修改以前使用的HTTP(请求路径和标头以及响应标头),这很好)改为使用流。 (我拒绝了这个选项。)
每次需要刷新时,单独的HTTP请求结束请求。管理状态将在应用程序中完成,因为现在已结束的连接将不再代表已结束的会话。 (在短期内,我将使用此选项。)
Socket.IO (这是 WebSockets的实现 +反向兼容性):此选项非常吸引人,但您需要添加Socket.IO图层位于HTTP层之前。 Socket.IO将传递所有HTTP请求,但WebSocket请求将以不同方式处理。 (从长远来看,我将使用此选项,但我必须修改我的前端以允许此操作。)
据我了解,Node.JS http
库不允许我发送响应头,除非客户端已经完成(或至少基本上开始)发送请求主体。我想这是有充分理由的,所以第三个选项也可以标题为在http
库前面添加一个图层。
答案 0 :(得分:2)
如果您真的在寻找双向通信系统,那么HTTP并不是正确的协议。整个想法是它是无状态的并且一次处理1个请求。这条规则有例外,但这些规则实际上正在扩展HTTP应该做的事情,并且可以被视为黑客攻击。
听起来你应该使用像Socket.IO
这样的东西