gpt4 book ai didi

php - Websockets 不适用于 Google Chrome

转载 作者:行者123 更新时间:2023-12-01 22:34:22 27 4
gpt4 key购买 nike

我有一个用 PHP 编写的服务器,它绑定(bind)到一个端口并监听套接字。我的服务器在 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 :

$header = socket_read($socket_new,1024);

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

WebSocket connection to 'ws://xyz.com:9001/chat_server.php' failed: Error during WebSocket handshake: Incorrect 'Sec-WebSocket-Accept' header value

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

最佳答案

我们有同样的问题,我们可以通过增加 socket_read() 函数中的“最大字节数”参数来解决它。你可以试试

socket_tead($socket_new, 2048);

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

您还可以使用 fsockopen() 和 fread() 代替 socket_read() 函数。

关于php - Websockets 不适用于 Google Chrome,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26811895/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com