There is no license information available for the latest version (dev-master) of this package.

YII2+SWOOLE组件

dev-master 2019-01-06 11:43 UTC

This package is not auto-updated.

Last update: 2024-05-04 11:58:34 UTC


README

安装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

配置YII2

  • 服务端配置:
...
'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:客户端连接超时时间

服务端

  • 创建服务端:继承componentsforyii2\swoole\console\SwooleController
  • 服务使用
class xxxController extends SwooleController {

}
使用console开启服务:
./XXX/index.php xxx/run start
命令参数:
start:开启服务
stop:停止服务
restart:重启服务
status:服务状态
  • 构建服务操作:使用console般的MC结构,然后直接在action里return数据就可以了。

客户端

  • 使用方式
/**
 * test对应服务端的Controller
 */
$client = new componentsforyii2\swoole\client\Client("test");
/**
 * test()对应服务端的action,参数为服务端action需要的参数
 */
$result = $client->test(["id"=>123,"name"=>"张三"]);

WebSocket

服务端

  • 配置服务端
...
'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)
    {

    }
}

客户端,自己研究(23333333)