Web浏览器无法在Google Chrome上运行

Ans*_*was 1 php google-chrome websocket

我有一个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);
Run Code Online (Sandbox Code Playgroud)

然后它监听端口:

socket_listen($socket);
Run Code Online (Sandbox Code Playgroud)

当HTTP消息从客户端到达时,服务器将读取标头:

$header = socket_read($socket_new,1024);
Run Code Online (Sandbox Code Playgroud)

然后将连接存储在Memcache存储中.这适用于大多数浏览器,包括safari,firefox和Chrome的Canary.但是,它不适用于chrome.浏览器抛出一条错误消息:

与'ws://xyz.com:9001/chat_server.php'的WebSocket连接失败:WebSocket握手期间出错:错误的'Sec-WebSocket-Accept'标头值

我的Chrome版本是:版本38.0.2125.111米(64位)

小智 6

我们遇到了同样的问题,我们可以通过增加socket_read()函数中的"最大字节数"参数来解决它.你可以试试

socket_tead($socket_new, 2048);
Run Code Online (Sandbox Code Playgroud)

原因是chrome中的websocket标题有时大于1024字节.因此,当您的服务器读取1024个字节时,它不会获得Sec-Websocket-Key参数,并且它无法生成有效的Sec-Websocket-Accept值.

您也可以使用fsockopen()和fread()代替socket_read()函数.