有没有办法让 WebSocket 客户端向 WebSocket 服务器发送有关初始连接的附加信息?
我问是因为我希望客户端立即将用户 ID(字符串)发送到服务器。我不希望客户端在 onopen 回调中发送用户 ID。为什么?因为它更快更简单。
如果 WebSocket API 不允许您这样做,为什么不呢?如果没有充分的理由,我怎么能建议他们添加这个简单的功能?
最佳答案
更新的答案
@dandavis 是个天才。他对在 WebSocket 构造函数的第一个 (url) 参数的查询字符串中发送用户 ID 的问题的评论有效!而且,我很确定它只在 opening handshake (1.3) of the WebSocket protocol (RFC 6455) 期间由客户端发送一次。 .
它甚至可以在路径中发送它,我现在更喜欢这种方式,因为我制作的 WebSocket 服务器仅用于 WebSockets。我正在使用 Node.js与 ws .我正在连接到 URL ws://localhost:5000/4
,其中 4
是用户 ID。为了获取用户 ID,我执行 ws.upgradeReq.url
,如下所示:
wss.on('connection', function(ws) {
console.log(ws.upgradeReq.url); # => '/4'
});
接下来,为了确保安全,我将传递访问 token 而不是用户 ID。
原始答案
您可以将用户 ID(字符串)作为 WebSocket constructor 的第二个(协议(protocol))参数传递.
这应该可行,但不是您想要的。这绝对是一个黑客。所以,我不推荐它。此外,服务器将在其握手中将用户 ID 回显给客户端。而且,你不需要那个。那将是通过网络发送的对您没有用的额外数据。
我不确定为什么 WebSocket API 不允许您做您想做的事。也许那样更安全。
关于javascript - WebSocket 发送有关连接的额外信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19461534/