node.js - 如何使用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 文本消息发送序言。
请建议。
谢谢
解决方案
像 heroku 这样的一些 Web 服务会为您处理这个问题,但像 openshift 这样的其他 Web 服务则不会。只需在 url 字符串中尝试 'wss' 而不是 'ws。
如果您想在 localhost 上执行此操作,请尝试使用 https 模块而不是 http。如果您需要手动执行,请尝试在创建 websocket 时设置标头
var wss = new WebSocketServer({ port: port,
aField: 'aValue',
anotherField: 'anotherValue' });
在设置端口的地方,您也可以设置标头,但您必须知道要设置的正确字段,以便浏览器接受它们。
推荐阅读
- ios - didReceiveMemoryWarning 从 UITableView 层次结构中删除单元格/视图
- javascript - 在服务器上有一个带有对象数组的 JSON 文件,并希望使用 fs.appendFile 将对象推送给它
- javascript - 如何使用 setInterval 和 CSS 样式更改文本动画?
- .net - 如何使用 2 个不同版本的 dll 在 2 个 .net 项目上建立接口
- c++ - 表达式不可赋值(不使用 * 或 / 的计算器)
- python - 获取 django 应用的公共地址
- python - 在Python中获取当前图形的二进制矩阵
- android - Kotlin - 使用接口在类之间传输数据
- angular - 仅在使用 *ngIf 指令时显示的属性
- machine-learning - 需要帮助理解 CGAN 中的标签输入