0

我想通过 HTTP 连接在 Node.JS 客户端和 Node.JS 服务器之间创建双向流。但似乎request直到客户端调用服务器的事件才被调用req.end()。如何建立双向通信?我需要使用单独的请求吗?

澄清:我的期望是有可能

  1. 客户端发送请求头,
  2. 发送响应头的服务器,以及
  3. 服务器和客户端随时发送字节。

编辑:好的,这是选项的摘要:

  • 单独端口上的 TCP 套接字:如果您不介意打开单独的端口,然后修改以前使用的 HTTP(请求路径和标头以及响应标头)以改用流,这很好。(我拒绝了这个选项。)

  • 单独的 HTTP 请求,每次需要刷新时结束请求。管理状态将在应用程序中完成,因为现在结束的连接将不再代表结束的会话。(短期内,我会使用这个选项。)

  • Socket.IO(是WebSockets +反向兼容的实现):这个选项很吸引人,但是需要在HTTP层前面加上Socket.IO层。Socket.IO 将通过所有 HTTP 请求,但 WebSocket 请求的处理方式不同。(从长远来看,我将使用此选项,但我必须修改我的前端以允许这样做。)

    据我了解,Node.JShttp库不允许我发送响应标头,除非客户端已经完成(或至少基本上开始)发送请求正文。我想这是有充分理由的,所以第三个选项也可以命名为在http库前面添加一个图层。

4

1 回答 1

2

如果您真的在寻找双向通信系统,那么 HTTP 并不是真正正确的协议。整个想法是它是无状态的并且一次处理 1 个请求。这条规则也有例外,但这些确实超出了 HTTP 应该做的事情,并且可以被认为是 hack。

听起来你应该使用像Socket.IO这样的东西

于 2012-08-23T22:21:23.280 回答