WebSocket发送有关连接的额外信息

时间:2013-10-19 02:02:26

标签: javascript callback websocket connection

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

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

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

2 个答案:

答案 0 :(得分:10)

更新答案

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

它甚至可以在路径中发送它,我现在更喜欢它,因为我制作的WebSocket服务器仅用于WebSockets。我正在Node.js使用ws。我正在连接到网址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不能让你做你想做的事情。也许这样更安全。

答案 1 :(得分:1)

由于v3 ws.upgradeReq已被弃用,因此无法再使用。

您现在可以使用:

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

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