“意外代码 200”是由 Railo 的 Web 套接字服务器发送过时的响应引起的。他们更改了网络套接字规范,Chrome 使用了更新的规范。
The problem seems to be caused by chrome & co implementing the new spec, "draft-ietf-hybi-thewebsocketprotocol-17". It requires the server to respond with "HTTP/1.1 101 Switching Protocols" rather than 200 OK.
这里的解决方案是自己更新 Railo Web 套接字扩展或使用其他解决方案:
这是一个用 PHP 编写的 web socket 聊天服务器的完整演示。
http://www.flynsarmy.com/2012/02/php-websocket-chat-application-2-0/
我自己用它来实现一个实时的 HTML 聊天,它由我躺在身边的 Arch Linux 机器提供服务。配置包括简单地设置 Apache 和 PHP,然后将 index.html 和 server.php 中的 IP 地址更改为服务器机器的外部 IP 地址。
这个 flynsarmy 演示包括最新版本的 PHPWebSocket,它是一个完全用 PHP 编写并包含在单个文件中的开源 Web 套接字服务器。演示挂钩到三个回调:连接、收到消息和断开连接。
对我来说,需要注意的重要一点是,Web 套接字协议仅支持文本,而不支持二进制,因此在为我自己的聊天应用程序扩展它时,我必须实现自己的命令来帮助控制服务器。在我的例子中,命令如下所示:
!kickusers: username, another_username, a_third_username
我的服务器代码会检查所有消息的第一个字符是否有“!” 如果存在,会将其视为命令。然后我将字符串切分以获得命令“kickusers”和要踢的用户列表。然后我调用适当的 kick 函数并将用户名数组传递给它。
因为我的场景是一个聊天客户端,这意味着用户可以在聊天中直接输入这个命令,服务器会接受并响应它。
所有这些部署在我的服务器上的方式是这样的:
- 当用户在浏览器中访问我服务器上的那个位置时,我让 Apache 为 index.html 页面提供服务。Apache 在这里的唯一目的是将 index.html 提供给请求它的客户端。
- index.html 页面包含用于显示聊天的 html 和用于向服务器发送和从服务器接收聊天的 javascript。基本上,index.html 只是一个用 HTML 和 Javascript 编写的聊天客户端,它在浏览器中运行。
- 我通过服务器上的 ssh 运行 server.php 以启动 WEB SOCKET 服务器(与 Apache 完全分离),它就坐在那里并处理聊天内容,例如向其他连接的客户端回显文本等。
尽管有关安装 Apache 和 PHP 的 Arch wiki 以您安装 Apache 和 PHP 包的方式特定于 Arch,但有关配置 Apache 和 PHP 的部分适用于所有人。如果您愿意,我会为您保存 google 查询并在此处给您链接:https ://wiki.archlinux.org/index.php/LAMP
至于原型,我提供 Flynsarmy 聊天演示链接的原因是因为他的评论很有帮助,他写了一篇关于它的博客,这是一个非常简单但完整的示例,说明了如何在 php 中使用 web sockets 做一些事情。