47

我有一个 Jetty 8 服务器正在运行(希望很快就会使用 websockets)。

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

$.ajax({ url: "ajax?a=getSomeData" });

在这种情况下,如果我在 连接到我的服务器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/');

作品。但我想要一个相对 url 之类的东西:

var socket = new WebSocket('ws://sockets?a=getSomeData');

所以 - 就像 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

我怎样才能做到这一点?

4

1 回答 1

69

只需自己构建 URL:

var socket = new WebSocket("ws://" + location.host + "/whatever");

location对象是对象的属性,因此window是全局可用的。

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

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

于 2013-04-18T18:33:29.180 回答