WebSocket地址可以携带参数吗?

Joã*_*imo 29 javascript html5 websocket node.js

ws://myserver.com/path?param=1有效的WebSocket地址吗?

地址http://myserver.com/path?param=1(注意它现在http而不是ws)可以正常使用wscat,但是我无法在浏览器上运行它.

kan*_*aka 28

ws://myserver.com/path?param=1是一个有效的WebSocket URI.但是,WebSocket服务器应用程序可以访问路径和查询字符串的方式将根据您使用的WebSocket服务器框架而有所不同.

如果您正在使用Node.js einaros/ws库,那么在您的websocket连接对象中将具有查询字符串所在的完整路径upgradeReq.url.

例如:

wss.on('connection', function(ws) {
    console.log("url: ", ws.upgradeReq.url);
};
Run Code Online (Sandbox Code Playgroud)

url: /path?param=1在您连接时打印ws://myserver.com/path?param=1.

  • 只需注意:您可以使用[`url.parse()进行[解析网址](http://www.codingdefined.com/2014/11/how-to-parse-urls-in-nodejs.html) ](https://nodejs.org/docs/latest/api/url.html#url_url_parsing) (4认同)
  • 更新:upgradeReq属性已删除.请参阅https://github.com/websockets/ws/pull/1099 (3认同)
  • 与最新的ws一起使用.连接回调现在有另一个参数 - 这是req.[code] wss.on("connection",(ws,req)=> {console.log(`Conn Url $ {req.url}`);}); [/码] (2认同)

sin*_*spk 6

要与最新的ws一起使用,连接回调现在具有另一个参数-req。

wss.on("connection", (ws, req) => {
   console.log(`Conn Url ${req.url}`);
});
Run Code Online (Sandbox Code Playgroud)