当前位置: 首页 > 后端技术 > PHP

yii2-swoole-websocket,支持JSONRPC通过WS、HTTP、Redis向worker下发异步任务

时间:2023-03-29 20:32:08 PHP

https://github.com/immusen/yii2-swoole-websocket示例:聊天室案例,示例代码:/websocket/controllers/RoomController.php发送消息:{"jsonrpc":"2.0","id":1,"method":"room/msg","params":{"id":"100111","content":{"text":"Helloworld!"}}}聊天室成员收到消息:{"jsonrpc":"2.0","id":1,"result":{"text":"Helloworld!"}}开发:1、在websocket/controllers目录下创建一个Controller,(也可以是其他路径,修改config/main.php中的controllerNamespace配置即可)addFds($this->fd,$param_1);#向当前websocket客户端发送信息$this->publish($this->fd,['p1'=>param_1,'p2'=>param_2]);#从集合中获取所有客户端fd$fds_array=$this->getFds($param_1);#向集合中的客户端群发消息$this->publish($fds_array,['p1'=>param_1,'p2'=>param_2]);#通过redis连接池操作redis$this->redis->set($param_1,0)}publicfunctionactionBaz(){//...}}2、发送JSONRPC,指定方法"foo/bar",并通过params传递相应的参数来调用上面的action{"jsonrpc":"2.0","id":1,"method":"foo/bar","params":{"param_1":"client_01","param_2":100,"param_n":{"time":1551408888,"type":"report"}}}所有客户端到服务器的RPC调用,除了websocket客户端,也可以使用HTTP或者Redis发布交付。这个特性可以用于Yiiweb应用程序向Swooleworker交付异步任务(例如发送短信..)。在聊天室示例中,您可以这样做:HTTP请求:http://127.0.0.1:8721/rpc?p={"jsonrpc":"2.0","id":1,"method":"room/msg","params":{"id":"100111","content":{"text":"系统警告!"}}}或redis-cli:127.0.0。1:6379>发布rpc'{"jsonrpc":"2.0","id":1,"method":"room/msg","params":{"id":"100111","content":{"text":"Systemwarning!"}}}'或在Yii网络应用程序中Yii:$app->redis->publish('rpc','{"jsonrpc":"2.0","id":1,"method":"room/msg","params":{"id":"100111","content":{"text":"Systemwarning!"}}}')或者通过Hook(推荐方法),支持runOnce即使在多个Swoole实例的情况下也保证任务只执行一次,参见immusen/yii2-swoole-websocket/Hook.phpYii::$app->hook->run('room/msg',['id'=>100111,'content'=>['text'=>'系统警告!']]);Yii::$app->hook->runOnce('sms/send',['mobile'=>15600008721,'代码'=>'8721']);新升级:启动脚本支持更多操作。/websocket-server{start|restart|reload|stop|status}./websocket-serverstatusmaster_pid=7404start_time=1554030075connection_num=130accept_count=1025767close_count=1025637tasking_num=123request_count=2051456worker_request_count=51110