[英]Authenticating using ws WebSocket
我正在使用ws webSocket (不能使用 socket.io),我对它有点陌生。 我知道它是如何工作的,但没有完全了解一些事情。
如何使用 jwt 进行身份验证? 文档说使用upgrade
事件是正确的方法,但是当客户端连接时, upgrade
函数中的代码没有运行。
添加事件类型的正确方法是什么? 在 socket.io 中,可以使用client.on('eventType', function)
进行client.on('eventType', function)
。 什么是 webSocket ws 等价物?
何时以及为什么会在 webSocket ws 中使用路径?
更新
更新事件不会在我结束时被触发。 这是我的代码:
文件 1
const server = require('http').createServer(app);
require('./socket/socket')(server);
档案 2
module.exports = function(server) {
const WebSocket = require('ws');
const wss = new WebSocket.Server({ port: 8080 });
server.on('upgrade', function(request, socket, head) {
console.log('Upgraded');
wss.handleUpgrade(request, socket, head, function(ws) {
wss.emit('connection', ws, request);
});
});
wss.on('connection', function connection(ws) {
ws.on('message', function incoming(message) {
console.log('received: %s', message);
});
});
};
ws 提供身份验证示例。 这些在 HTTP 服务器第一次处理身份验证请求时起作用。 然后将 HTTP 升级请求传递给 ws 而不是 ws 本身监听端口。 请注意它们包含在设置中的noServer: true
选项:
const wss = new WebSocket.Server({ clientTracking: false, noServer: true });
jwt 组件首先使用koa或 HTTP 中的express会更容易,然后以这种方式进行升级。 否则,您将需要编写一个 ws message
处理程序来查找一些令牌数据并对其进行验证。
message
是 ws 中的事件。 您可以在message
事件之上编写任何更具体的内容,这是使用 socket.io 的一个重要原因,它为您完成了所有工作(包括客户端回调函数,它们非常有用)。
在ws://
或 http 升级请求中使用 URI 路径通常会连接到服务器端的单独ws
上下文。 一种将命名空间或连接分离成谨慎组的简单方法。
如何使用 jwt 进行身份验证? 文档说使用升级事件是正确的方法,但是当客户端连接时,升级函数中的代码没有运行。
嗯,有很多不同的选择。 首次建立连接时,您可以将令牌作为自定义标头的查询参数传递。 您可以要求通过 webSocket 发送的第一个数据是一个令牌,如果这样的令牌没有尽快到达,则断开连接。 如果客户端已经过身份验证并且有一个 http cookie 表明这一点,您可以在 websocket 连接时检查该 cookie。
添加事件类型的正确方法是什么? 在 socket.io 中,可以使用 client.on('eventType', function) 进行侦听。 什么是 webSocket ws 等价物?
socket.io 消息类型(或称为事件类型)是 socket.io 添加在 webSocket 之上的东西。 webSocket 协议本身没有这样的东西。 您发送一个数据包,该数据包到达另一端。 所有数据包都具有相同的 webSocket“类型”。 如果您想将您的数据包识别为某种类型的消息,那么您必须发明一种在您的数据内部执行此操作的方法。 例如,如果您的数据是 JSON 格式,您可以向事件消息添加一个type: "someType"
属性,然后在收到时检查该属性(这实际上是 socket.io 所做的,尽管它在 socket.io 负载之外执行)。
何时以及为什么会在 webSocket ws 中使用路径?
您可能有两个完全独立的代码部分,它们将 webSocket 用于不同的事物,这些事物没有共同点并驻留在单独的模块中,并且每个部分都有自己的 webSocket 连接更简单。 而且,它们可能被两种完全不同类型的客户端使用。
当 webSocket 客户端连接到您的服务器时如何访问原始 URL 显示在与ws
库一起使用的服务器upgrade
事件中。
您会在该示例中注意到upgrade
事件发生在 http 服务器上,而不是 websocket 服务器实例上。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.