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

Javascript WebSocket发送有关连接的额外信息,javascript,callback,websocket,connection,Javascript,Callback,Websocket,Connection,WebSocket客户端是否有办法向WebSocket服务器发送有关初始连接的附加信息 我这样做是因为我希望客户端立即将用户ID(字符串)发送到服务器。我不希望客户端在onopen回调中发送用户ID。为什么?因为它更快更简单 如果WebSocket API不允许您这样做,为什么不呢?如果没有充分的理由,我如何建议他们添加此简单功能?更新答案 @丹达维斯是个天才。他对在WebSocket构造函数的第一个(url)参数的查询字符串中发送用户ID的问题的评论是有效的!而且,我敢肯定,在整个过程中,客户

WebSocket客户端是否有办法向WebSocket服务器发送有关初始连接的附加信息

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

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

更新答案 @丹达维斯是个天才。他对在WebSocket构造函数的第一个(url)参数的查询字符串中发送用户ID的问题的评论是有效的!而且,我敢肯定,在整个过程中,客户只发送了一次

它甚至可以将它发送到路径中,我现在更喜欢这个路径,因为我制作的WebSocket服务器只是针对WebSocket的。我在用。我正在连接到URL
ws://localhost:5000/4
,其中
4
是用户ID。要获取用户ID,我需要
ws.upgradeReq.URL
,如下所示:

wss.on('connection', function(ws) {
    console.log(ws.upgradeReq.url); # => '/4'
});
接下来,为了确保安全,我将传递访问令牌,而不是用户ID

原始答案 可以将用户ID(字符串)作为的第二个(协议)参数传递

这应该行得通,但这不是你想要的。这绝对是一次黑客攻击。所以,我不推荐它。此外,服务器将在握手时将用户ID回显给客户端。而且,你不需要这样。那将是额外的数据通过电线发送,对你没有用


我不知道为什么WebSocket API不让你做你想做的事。也许这样更安全。

因为v3
ws.upgradeReq
已被弃用,不再工作

您现在可以使用:

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

来源:

这是一个url,您可以使用整个查询字符串……您不知道OP想要什么吗?(忘记更改登录名了吗?)嗯,我当时和现在是一个不同的人。时代变了。我和他们一起改变总是在学习。始终在发展。您可以在WS-URI中使用路径或查询组件,但不能使用片段标识符。您不应该使用WS-Subtocol。这不仅是一种黑客行为,而且会在很多方面破坏事物。您也可以使用HTTP自定义头或cookies。很高兴知道。谢谢!:-)