首页 > 解决方案 > 如何使用nodejs中的ws npm模块从客户端向WebSocket服务器发送“升级”握手?

问题描述

我正在使用 ws npm 模块在 nodejs 中构建我的 WebSocket 客户端和服务器

从客户端我必须向服务器发送一个“升级”握手请求,并使用一些指定的协议到服务器。

从客户端,这就是我用来连接服务器的方法。

const ws = new WebSocket('ws://localhost:8989/');
ws.on('open', function open() {
          console.log('Connected to Server');
          })

这是我的握手请求,

GET <target> HTTP/1.1
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Key: x3JJHMbDL1EzLkh9GBhXDw==
Sec-WebSocket-Protocol: com.xxx.service.v1
Sec-WebSocket-Version: 13

我应该如何使用 ws npm 模块将升级标头和协议添加到我的客户端连接请求中,我应该如何在服务器端解释它们?

这是我的示例服务器端代码,

var port: number = 8989;
var WebSocketServer = WebSocket.Server;
var wss = new WebSocketServer({ port: port });

wss.on('connection', (ws: WebSocket) => {
    console.log('Web Socket Server Connected');
});

我不知道如何通过 ws 客户端发送这些升级标头以及如何在服务器端解释它们?

握手之后,我必须通过 websocket 文本消息发送序言。

请建议。

谢谢

标签: node.jswebsocketserverclienthandshake

解决方案


像 heroku 这样的一些 Web 服务会为您处理这个问题,但像 openshift 这样的其他 Web 服务则不会。只需在 url 字符串中尝试 'wss' 而不是 'ws。

如果您想在 localhost 上执行此操作,请尝试使用 https 模块而不是 http。如果您需要手动执行,请尝试在创建 websocket 时设置标头

    var wss = new WebSocketServer({ port: port,
                                    aField: 'aValue',
                                    anotherField: 'anotherValue' });

在设置端口的地方,您也可以设置标头,但您必须知道要设置的正确字段,以便浏览器接受它们。


推荐阅读