如何将WebSocket指向当前服务器

Twi*_*one 26 javascript ajax websocket

我有一台Jetty 8服务器正在运行(希望很快就会有websockets).

如果我想通过ajax调用将一些数据发送到服务器,我可以这样做:

$.ajax({ url: "ajax?a=getSomeData" });
Run Code Online (Sandbox Code Playgroud)

在这种情况下,如果我连接到我的服务器192.168.1.100,它将从中获取数据的真实URL 192.168.1.100/ajax?a=getSomeData,但是如果我连接到运行相同软件的另一台服务器192.168.1.200,则url将是192.168.1.200/ajax?a=getSomeData.

但是,如果我想使用WebSockets完成同样的事情,我找不到如何做到这一点:

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

作品.但我想要一个像相对网址的东西:

var socket = new WebSocket('ws://sockets?a=getSomeData');
Run Code Online (Sandbox Code Playgroud)

所以 - 就像ajax请求 - 如果我连接到我的服务器192.168.1.100,url将是192.168.1.100/sockets?a=getSomeData,如果我连接到192.168.1.200,url将是192.168.1.200/sockets?a=getSomeData.

我怎么能做到这一点?

Poi*_*nty 43

只需自己构建URL:

var socket = new WebSocket("ws://" + location.host + "/whatever");
Run Code Online (Sandbox Code Playgroud)

location对象是一个属性window对象,并且因此是全局可用的.

要仅获取没有端口的主机,请location.hostname改用.例如,如果websocket服务器侦听另一个端口.

您还可以检查location.protocol是否应该连接wss(https使用时)或ws(何时http使用).

  • 如果需要更改端口号,请确保从"location.host"中删除端口号!`location.hostname`将起作用. (12认同)
  • 只需使用`new WebSocket(location.origin.replace(/ ^ http /,'ws')+“ / whatever”)`即可同时使用http和https。 (2认同)