Node.js 如何响应升级请求?

Posted

技术标签:

【中文标题】Node.js 如何响应升级请求?【英文标题】:Node.js how to respond to an upgrade request? 【发布时间】:2013-08-05 09:41:43 【问题描述】:

我正在处理来自 Node.js http 服务器的 websocket 'upgrade' 事件 - 升级处理程序的形式为 function(req, socket, head) - 如果存在,我如何发送对此升级请求的响应没有 res 对象吗?有没有办法使用套接字对象来做到这一点?如何发回标头?

【问题讨论】:

你为什么使用http服务器来做websockets?有plenty of dedicated libraries。是的,你应该通过套接字来回答。 我正在为 engine.io 编写一个自定义代理。 node-http-proxy 库(由 Noejitsu 提供)似乎不适用于 engine.io - 我只想让基本逻辑在这个阶段正常工作。 【参考方案1】:

您只需要使用适当的 HTTP 语法以纯文本形式调用 socket.write(来自***):

HTTP/1.1 101 Switching Protocols
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Accept: HSmrc0sMlYUkAGmm5OPpG2HaGWk=
Sec-WebSocket-Protocol: chat

使用\r\n 行分隔符。在那之后,HTTP 结束了,现在您只使用裸 TCP 套接字。

【讨论】:

以上是关于Node.js 如何响应升级请求?的主要内容,如果未能解决你的问题,请参考以下文章

如何发送 POST 请求以响应 node.js Express?

node.js 和 express:如何等待 udp 响应

如何在node.js服务器流式http请求中处理JSON流响应数组

如何在 node.js + Express 中同时支持 json 和 jsonp 响应?

Node.js 应用程序从 GET 请求到 API 接收到空响应

node.js中护照身份验证后如何发送json作为响应