我们知道,有些业务需要我们服务端来充当socket的客户端与其他服务端进行数据的持久交互,
那么利用workerman非常简单的就实现这个功能,下面看代码。
use Workerman\Worker;
use Workerman\Connection\AsyncTcpConnection;
$worker = new Worker();
$worker->onWorkerStart = function($worker){
$con = new AsyncTcpConnection('ws://IP:端口');
$con->onConnect = function($con) {
// 每60秒运行一次
\Workerman\Lib\Timer::add(60, function () use ($con){
$data = json_encode([
'cmd' => 'pong',
]);
$con->send($data);
});
};
$con->onMessage = function($con, $data) { //当服务端推送数据的时候可以在此回调函数里接受到
$data = json_decode($data, true);
var_dump($data);
};
$con->onClose = function ($con) {
//这个是延迟断线重连,当服务端那边出现不确定因素,比如宕机,那么相对应的socket客户端这边也链接不上,那么可以吧1改成适当值,则会在多少秒内重新,我也是1,也就是断线1秒重新链接
$con->reConnect(1);
};
$con->onError = function ($connection, $code, $msg) {
echo "error $code $msg\n";
};
$con->connect();
};
Worker::runAll();