我用workerman/workerman来做websocket。主要的问题是-如何在websocket关闭时发送消息?我也试着向其他连接发送消息。也没有结果。
public function run()
{
$this->ws = new Worker(
'websocket://0.0.0.0:' . $_ENV['WS_PORT'],
['ssl' => [
'local_cert' => $_ENV['WS_CERTIFICATE_CRT'],
'local_pk' => $_ENV['WS_CERTIFICATE_KEY'],
'verify_peer' => false,
]]
);
$this->ws->count = 1;
$this->ws->transport = 'ssl';
$this->ws->onConnect = function ($connection) {
$this->onConnect($connection);
};
$this->ws->onMessage = function ($connection, $data) {
$this->onMessage($connection, $data);
};
$this->ws->onClose = function ($connection) {
$this->onClose($connection);
};
Worker::runAll();
}
这不管用
private function onClose($connection)
{
$connection->send("Hello");
}
1条答案
按热度按时间mdfafbf11#
查看workerman/workerman的源代码,我们可以看到
onClose
事件的实现方式如下:如您所见,
onClose
在套接字关闭后发出。因此,您将无法再在
onClose
处理程序中使用该套接字。更好的解决方案是客户机向服务器发送某种“关闭”数据包。
然后服务器可以运行一些逻辑,并在完成后关闭连接。