如何将WebSocket关闭框架发送到PHP服务器上的客户端?

时间:2016-10-11 13:37:04

标签: php websocket

我在WebSocekt类的close方法中编写了这段代码:

$msg = str_split(sprintf('%016b', $code), 8);
$msg[0] = chr(bindec($msg[0]));
$msg[1] = chr(bindec($msg[1]));
$msg = implode('', $msg).$reason;
socket_write($client, self::encode($msg, 'close'), 127);

我现在肯定的是,我根据协议页面上的说法编写了它,方法encode()创建了一个关闭框架,socket_write()将它发送给客户端没有任何错误,也没有服务器或客户端报告任何错误。但客户端什么都没收到,当使用console.log()来记录onclose事件时,它报告不正常关闭,得到了一个接近的代码1006,没有任何理由,即使我发送代码为1000的关闭框架和正常关闭的原因。所以我很困惑,谁能告诉我如何发送一个能够使这项工作的结束框架。

1 个答案:

答案 0 :(得分:0)

我遇到了同样的问题。发送socket.close(1000,'您的原因')不会使客户端收到关闭控制帧。您还必须使用socket_close($ client)在后端执行此操作。但是,尽管这会关闭连接,但不会向客户端发送关闭控制帧。我怀疑这与确保socket_close($ client)等待有关,然后在适当的时候对其进行处理。因此,类似socket_set_options()和SO_LINGER的东西可能会起作用。我仍在调查这个问题。