我在PHP中有一个绑定到端口并侦听套接字的服务器。我的服务器在PHP脚本中启动:
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
socket_set_option($socket, SOL_SOCKET, SO_REUSEADDR, 1);
socket_bind($socket, 0, $port);
然后它监听端口:
socket_listen($socket);
当HTTP消息从客户端到达时,服务器会读取标题:
$header = socket_read($socket_new,1024);
然后将连接存储在Memcache存储中。这适用于大多数浏览器,包括safari,firefox和Chrome的Canary。但是,它并不适用于chrome。浏览器抛出错误消息:
WebSocket连接到' ws://xyz.com:9001 / chat_server.php' 失败:WebSocket握手期间出错:不正确 '二段的WebSocket-接受'标题值
我的Chrome版本为:版本38.0.2125.111 m(64位)
答案 0 :(得分:6)
我们遇到了同样的问题,我们可以通过增加socket_read()函数中的“最大字节数”参数来解决它。你可以尝试
socket_tead($socket_new, 2048);
原因是chrome中的websocket标题有时大于1024字节。因此,当您的服务器读取1024个字节时,它不会获得Sec-Websocket-Key参数,也无法生成有效的Sec-Websocket-Accept值。
您也可以使用fsockopen()和fread()代替socket_read()函数。