WebSocket发送有关连接的更多信息

问题描述 投票:11回答:2

WebSocket客户端是否有办法在与WebSocket服务器的初始连接上发送其他信息?

我问,是因为我希望客户端将用户ID(字符串)立即发送到服务器。我不希望客户端在onopen回调中发送用户ID。为什么?因为它更快,更简单。

如果WebSocket API不允许您这样做,为什么不呢?如果没有充分的理由,我如何建议他们添加此简单功能?

javascript callback websocket connection
2个回答
11
投票

更新后的答案

@@ dandavis是个天才。他对在WebSocket构造函数的第一个(url)参数的查询字符串中发送用户ID的问题的评论有效!而且,我很确定它在opening handshake (1.3) of the WebSocket protocol (RFC 6455)期间仅由客户端发送一次。

它甚至可以在路径中发送,我现在更喜欢,因为我制作的WebSocket服务器仅用于WebSocket。我正在将Node.jsws结合使用。我正在连接到URL ws://localhost:5000/4,其中4是用户ID。要获取用户ID,请执行ws.upgradeReq.url,如下所示:

wss.on('connection', function(ws) {
    console.log(ws.upgradeReq.url); # => '/4'
});

接下来,为了确保安全,我将传递访问令牌而不是用户ID。

原始答案

您可以将用户ID(字符串)作为WebSocket constructor的第二个(协议)参数传递。

这应该有效,但这并不意味着您想要的。绝对是黑客。因此,我不建议这样做。此外,服务器将在握手时将用户ID回显给客户端。而且,您不需要。那将是多余的数据通过网络发送,对您毫无用处。

我不确定WebSocket API为什么不允许您执行所需的操作。也许这样更安全。


0
投票

由于v3 ws.upgradeReq已被弃用,因此不再起作用。

您现在可以使用:

wss.on('connection', function(ws, req) {
    console.log(req.url); # => '/4'
});

来源:https://github.com/websockets/ws#client-authentication

© www.soinside.com 2019 - 2024. All rights reserved.