Wallogit.com
2017 © Pedro Peláez
YII2+SWOOLE组件
#/usr/local/php/bin/pecl install swoole
git clone https://github.com/swoole/swoole-src.git cd swoole-src phpize ./configure make && make install
...
'components'=>[
'server'=>[
'class'=>'componentsforyii2\swoole\ServerComponent',
'config'=>[
'host'=>'127.0.0.1',
'port'=>'8888',
'client_timeout'=>30,
'pidfile'=>'/tmp/swoole.pid'
'setting'=>[
'log_file'=>Yii::getAlias("@server/runtime/server.log"),
]
]
],
],
...
host:服务启动IP port:服务启动端口 client_timeout:客户端连接超时时间 pidfile:服务进程启动PID记录文件 setting['log_file']:日志记录文件
'params'=>[
'serverClient'=>[
'default'=>[
'host'=>'127.0.0.1',
'port'=>'8888',
'client_timeout'=>30
]
]
]
default:默认配置 host:服务端IP地址 prot:服务端端口号 client_timeout:客户端连接超时时间
class xxxController extends SwooleController {
}
使用console开启服务:
./XXX/index.php xxx/run start
命令参数:
start:开启服务
stop:停止服务
restart:重启服务
status:服务状态
/**
* test对应服务端的Controller
*/
$client = new componentsforyii2\swoole\client\Client("test");
/**
* test()对应服务端的action,参数为服务端action需要的参数
*/
$result = $client->test(["id"=>123,"name"=>"张三"]);
...
'components'=>[
'websocket'=>[
'class'=>'componentsforyii2\swoole\WebSocketComponent',
'config'=>[
'host'=>'127.0.0.1',
'port'=>'8008',
'pidfile'=>'/tmp/websocket.pid',
'setting'=>[
'daemonize'=>true
]
]
]
]
...
host:服务端IP地址 port:服务端端口 pidfile:记录服务端启动PID的文件 setting['daemonize']:是否守护进程启动
/** * 创建服务端,继承\componentsforyii2\swoole\console\WebSocketController */ use \componentsforyii2\swoole\console\WebSocketController as Controller; class WebSocketController extends Controller { /** * 客户端链接上的时候回调函数 * @param \swoole_websocket_server $server * @param $request */ protected function open(\swoole_websocket_server $server, $request) { echo "连接打开了"; } /** * 服务端收到客户端消息时候的回调函数 * @param \swoole_websocket_server $server * @param $frame */ protected function message(\swoole_websocket_server $server, $frame) { echo "receive from {$frame->fd}:{$frame->data},opcode:{$frame->opcode},fin:{$frame->finish}\n"; foreach ($server->connections as $fd) { $server->push($fd, "this is messge:{$frame->data}"); } } /** * 客户端断开链接时候的回调函数 * @param $ser * @param $fd */ protected function close($ser, $fd) { } /** * 当使用request请求时候当回调函数 * @param $request * @param $response */ protected function request($request, $response) { } }