14

我对 HTML5 Websockets 有点困惑。我看过很多教程,其中很多都有使用不同端口进行连接的不同变体。这些端口是什么意思?

例如,Adobe使用这个:

new WebSocket('ws://localhost:1740');

然后另一个教程有这个不需要端口:

new WebSocket("ws://www.websockets.org");

最后第三个教程有一个端口,但它完全不同:

new WebSocket("ws://localhost:8080/echo");

我的问题是,为什么这些会有所不同?我如何知道要连接到哪些端口?另外,我试图做我自己的连接:

var ws = new WebSocket("ws://test.ontarget-network.com/");

但我收到以下错误:Unexpected response code: 200

我已经测试并尝试连接到各种其他“端口”(显然不知道我在做什么,输入随机数)并且这个错误会消失,但是,我的代码

ws.onopen = function(){
   alert("Connection Established");
};

不会执行。

我正在尝试完全理解 HTML5 的 Websockets API,以便我可以试验并创建更多动态应用程序。谢谢您的帮助。

4

4 回答 4

13

以下来自最新的 WebSocket 草案

默认情况下,WebSocket 协议使用端口 80 进行常规 WebSocket 连接,端口 443 用于通过 TLS [RFC2818] 隧道传输的 WebSocket 连接。

但实际上,您应该能够使用任何未使用的有效端口。只要客户端尝试连接到服务器端脚本为套接字连接打开的相同端口,就应该没问题。

关于端口的快速说明:

  • 端口 80 是 HTTP 端口。
  • 端口 8080 是备用 HTTP 端口。
  • 端口 443 是 HTTPS(即带有 TLS 的 HTTP)端口。
  • Adobe 代码中的端口 1740 似乎是其他服务尚未使用的某个随机端口。

有关预设端口的完整列表,请参阅以下内容:
http ://en.wikipedia.org/wiki/List_of_TCP_and_UDP_port_numbers

至于您的“意外响应代码:200”错误,我猜您在客户端使用的 WebSocket URL 未指向有效的服务器端脚本,但如果没有更多信息,这很难评论。

于 2013-01-28T04:41:45.117 回答
13

服务器应该有一个接受 WebSocket 连接的端点。因此,如果该端点是/echo您想要连接到:

ws://localhost:8080/echo/websocket

如果您在端点之后排除后缀,您将收到Unexpected response code: 200错误消息。/websocket我也有同样的困惑,这个链接为我清除了一些东西。

于 2015-11-12T18:49:45.140 回答
0

我有同样的问题,但为了生存

Unexpected response code: 200

您需要使用服务器端脚本来处理 Web 套接字,或者您可以使用Node.js构建您的服务器脚本。为了教育起见,您可以尝试构建自己的 websocket 服务器脚本。

于 2013-09-10T09:44:45.670 回答
-8

实际上还有其他东西......您无法打开到每个端口的连接,因为每个浏览器中都有一个被阻止端口的列表。我记得在 Michal Zalewski 的“The tangled Web”中看到了完整的端口列表;但是,我认为快速谷歌也会显示这一点。

于 2013-04-06T10:41:35.773 回答