WebSocket URL中资源的用途是什么?

Cha*_*son 13 websocket

看一下WebSockets上的W3规范,我明白了

var socket = new WebSocket('ws://game.example.com:12010/updates');
socket.onopen = function () {
  setInterval(function() {
    if (socket.bufferedAmount == 0)
      socket.send(getUpdateData());
  }, 50);
};
Run Code Online (Sandbox Code Playgroud)

我知道套接字服务存在于game.example.com的端口12010上,但是URL中'/ updates'资源的用途是什么?如果服务住在某个港口,资源有什么用?

Pau*_*tum 9

您可以使用不同的URI在同一端口上公开不同的逻辑WebSocket.

让我们以聊天为例.您可以使用URI来确定要加入的特定频道或聊天室.

var socket = new WebSocket('ws://chat.example.com/games');
var socket = new WebSocket('ws://chat.example.com/movies');
var socket = new WebSocket('ws://chat.example.com/websockets');
Run Code Online (Sandbox Code Playgroud)

您还可以使用查询字符串.想象一下股票代码:

var socket = new WebSocket('ws://www.example.com/ticker?code=MSFT');
var socket = new WebSocket('ws://www.example.com/ticker?code=GOOG');
Run Code Online (Sandbox Code Playgroud)

  • 并补充说:它不仅取决于客户端实现者,还取决于服务器实现者.除非两个同行都同意说Google-Mux扩展,否则不会说出来.因此,可能更合适的是,即储存器的自动收报机符号不是RESTful(读取:旧学校)映射到不同的WS URI,而是将这些主题URI嵌入到应用程序级别的消息中,然后在1个WS连接上运行.想象一下,你有1000个股票代码.即使使用MUX,您可能也不希望拥有1000个逻辑WS连接. (3认同)
  • 这将是3个连接,都可以同时在两个方向上运行流量.Google有一个建议的多路复用扩展,理论上允许浏览器通过1个物理连接运行这3个逻辑websocket连接,但这还处于早期阶段,并且由实现者(本例中的浏览器)来利用这个延期. (2认同)