实例代码如下:
<?php
$server = new \swoole_websocket_server("0.0.0.0", 9443);
$server->set(array(
'worker_num' => 1,
'max_request' => 500,
'task_worker_num' => 1,
'max_connection' => 1024
));
$server->on('start', function (\swoole_websocket_server $server) {
$pid = getmypid();
$mPid = getmypid();
echo "this is Master pid: $mPid\n";
$process = new swoole_process('process');
$pid = $process->start();
});
$server->on('message', function (\swoole_websocket_server $server, $frame) {
echo "receive from {$frame->fd}:{$frame->data},opcode:{$frame->opcode},fin:{$frame->finish} workerid: {$server->worker_id}\n";
});
$server->on('task', function (\swoole_server $serv, $task_id, $from_id, $data) {});
$server->on('finish', function (\swoole_server $serv, $task_id, $from_id, $data) {});
$server->start();
function process(swoole_process $process)
{
global $server;
swoole_set_process_name("php processor");
// 等待客户端连接, 20秒后向客户端循环发送数据
swoole_timer_after(20 * 1000, function() use ($server){
foreach ($server->connections as $fd) {
var_dump($fd);
$server->push($fd, 'hello');
}
});
}
20秒后, var_dump出了fd, 但是客户端没有收到数据.
使用addProcess,不要在onStart回调函数中创建process
ok, 可以了, 多谢.
贴上修改后的实例代码:
<?php
$server = new \swoole_websocket_server("0.0.0.0", 9443);
$server->set(array(
'worker_num' => 1,
'max_request' => 500,
'task_worker_num' => 1,
'max_connection' => 1024
));
$process = new swoole_process('process');
$pid = $process->start();
$server->addProcess($process);
$server->on('start', function (\swoole_websocket_server $server) {
$pid = getmypid();
echo "this is Master pid: $pid\n";
});
$server->on('message', function (\swoole_websocket_server $server, $frame) {
echo "receive from {$frame->fd}:{$frame->data},opcode:{$frame->opcode},fin:{$frame->finish} workerid: {$server->worker_id}\n";
});
$server->on('task', function (\swoole_server $serv, $task_id, $from_id, $data) {});
$server->on('finish', function (\swoole_server $serv, $task_id, $from_id, $data) {});
$server->start();
function process(swoole_process $process)
{
global $server;
swoole_set_process_name("php processor");
swoole_timer_after(10 * 1000, function() use ($server){
foreach ($server->connections as $fd) {
var_dump($fd);
$server->push($fd, 'hello');
}
});
}
Most helpful comment
贴上修改后的实例代码: