无法让插座工作 - 我错过了什么愚蠢的东西


Can't get sockets working - what silly thing am I missing?

我试图进入网络套接字的美丽新世界,但我无法正常工作。

我已经下载并尝试了几个PHP套接字服务器,但没有快乐。他们似乎非常缺乏有关如何在您自己的服务器上实际工作的步骤信息。

我将服务器脚本的路径作为新 WebSocket() 的第一个参数传递给 - 例如"ws://localhost:33/sockets/server.php"。是吗?

我应该传递任何东西作为第二个参数吗?我已经阅读了,但我不太确定。

任何帮助表示赞赏。

您传递给 WebSocket 的路径与文件系统中的实际路径无关.
当 WebSocket 连接到服务器时,它只使用实际地址"localhost"和端口"33"。然后在握手的HTTP请求中,它将获取"路径"详细信息,即"/sockets/server.php",并将它们放在握手中,因此握手的第一行将如下所示:

GET /sockets/server.php HTTP/1.1

因此,您的应用程序将使用它来决定如何处理它。如果您想使用它并使其看起来像与实际文件相关或以自己的方式使用它。

以下是 RFC 6455 在 WebSockets URI 上的一些信息。

也不要使用端口 33,因为它可能被 DSP 服务占用。在此处查看端口映射.
如果将服务器端 WebSocket 绑定到端口 33,则它应继续连接。

建立TCP层连接后,应通过握手的HTTP请求进行。

在那之后,成功了。客户端的 JavaScript 将抛出 onopen 回调。如果出现问题,它将抛出错误和关闭事件。

成功建立连接并且WebSocket确实通过握手进行消息传递后,可以进行消息传递。客户端将接收原始字符串作为消息或二进制(如果服务器发送二进制数据,则为具有特定操作码的消息)。但是服务器将接收带有成帧和一些标头的数据。浏览器确实会自动应用解构,因此在客户端,您无需担心这一点。但是在服务器端,您必须自己做,或者使用一些现有的库来为您处理。

以下是WebSockets协议的官方文档:RFC 6455。它包含您需要了解WebSockets协议各个方面的所有信息。

同时,您可能有兴趣研究现成的解决方案。并浏览他们的例子。