【问题标题】:Websockets not working on Google ChromeWebsockets 无法在 Google Chrome 上运行
【发布时间】:2014-11-07 23:39:23
【问题描述】:

我在 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。浏览器抛出错误信息:

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

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

【问题讨论】:

    标签: php google-chrome websocket


    【解决方案1】:

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

    socket_tead($socket_new, 2048);
    

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

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

    【讨论】:

    • 就我而言,最大。字节数 = 5000 工作。 socket_read($socket_new, 5000);
    猜你喜欢
    • 2020-01-07
    • 2017-02-26
    • 1970-01-01
    • 1970-01-01
    • 2022-01-07
    • 2013-07-08
    • 1970-01-01
    • 2018-03-26
    • 1970-01-01
    相关资源
    最近更新 更多