【问题标题】:Writing Websocket server编写 Websocket 服务器
【发布时间】:2019-08-07 15:26:24
【问题描述】:

我正在使用本文作为我的 guid 使用 nodejs 编写 websocket 服务器

https://developer.mozilla.org/en-US/docs/Web/API/WebSockets_API/Writing_WebSocket_servers#Client_Handshake_Request

我正在监听 /chat 路由以向客户端发送 websocket 握手响应,如下所示:

const server = http.createServer((req, res) => {
    if(req.url === '/chat') {
        let clientWebSocketKey = req.headers['Sec-WebSocket-Key'];
        const concatenatedKey = clientWebSocketKey + '258EAFA5-E914-47DA-95CA-C5AB0DC85B11';
        const acceptKey = crypto.createHash('sha1').update(secret).digest('base64');
        res.setHeader('Upgrade','websocket');
        res.setHeader('Connection', 'Upgrade');
        res.setHeader('Sec-WebSocket-Accept', acceptKey);
        res.setHeader('Connetion', 'keep-alive');
        res.statusCode = 101;
        console.log("WEBSOCKET GET REQUEST");
        console.log(res.statusCode); 
    }

    if(req.url === '/') {
        res.write('Main route');
        res.end();
    }
});

我也在使用邮递员发起 http GET 请求,但我从来没有得到正确的握手。

Host: localhost:3000/chat
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ==
Sec-WebSocket-Version: 13

我预计会做错事,但我想不通。

【问题讨论】:

  • 如果你使用 socket.io 库,你真的可以简化它
  • @AndrewHansen 我需要对其进行硬编码。

标签: node.js http websocket server


【解决方案1】:

您可能知道,WebSocket 是一个单独的协议,它使用 HTTP 仅用于进行握手。因此,可能是 Postman 没有解析 101 状态码。

我建议您使用 upgrade 事件在 node.js 中编写您的请求,如文档中的 here 所述

【讨论】:

  • 非常感谢您的澄清。非常感谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-11-05
  • 2011-11-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-13
相关资源
最近更新 更多