摘要:示例聊天室案例示例代码发送消息聊天室成员接收消息开发在目录下创建也可以是其它路径只需修改中配置把当前客户端存储到一个集合作为其它字符串亦可向当前客户端发送信息从集合中取出所有客户度群发消息给集合中的客户端通过连接池操作发
https://github.com/immusen/yii2-swoole-websocket
示例:
聊天室案例, 示例代码: /websocket/controllers/RoomController.php
发送消息:
{ "jsonrpc":"2.0", "id":1, "method":"room/msg", "params":{ "id":"100111", "content":{ "text":"Hello world!" } } }
聊天室成员接收消息:
{ "jsonrpc":"2.0", "id":1, "result":{ "text":"Hello world!" } }
开发:
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) } public function actionBaz() { //... } }
2, 发送JSONRPC, 并指定method为"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 Publish来投递, 该特性可以用于Yii Web应用向Swoole worker投递异步任务(例如发短信..), 在聊天室例子中, 可以这样操作:
HTTP 请求:
http://127.0.0.1:8721/rpc?p={"jsonrpc":"2.0","id":1,"method":"room/msg","params":{"id":"100111","content":{"text":"System warning!"}}}
或 redis-cli:
127.0.0.1:6379> publish rpc "{"jsonrpc":"2.0","id":1,"method":"room/msg","params":{"id":"100111","content":{"text":"System warning!"}}}"
或 在Yii web 应用中
Yii:$app->redis->publish("rpc", "{"jsonrpc":"2.0","id":1,"method":"room/msg","params":{"id":"100111","content":{"text":"System warning!"}}}")
或通过Hook(推荐方式), 支持runOnce, 确保任务即使在多Swoole实例的情况下只执行一次, 详见immusen/yii2-swoole-websocket/Hook.php
Yii::$app->hook->run("room/msg", ["id" => 100111, "content" => ["text" => "System warning!"]]); Yii::$app->hook->runOnce("sms/send", ["mobile" => 15600008721, "code" => "8721"]);
新升级:启动脚本支持更多操作
./websocket-server {start|restart|reload|stop|status}
./websocket-server status master_pid=7404 start_time=1554030075 connection_num=130 accept_count=1025767 close_count=1025637 tasking_num=123 request_count=2051456 worker_request_count=511103 coroutine_num=2
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/30919.html
摘要:交易所及第三方平台充提网关接入指南本指南主要目的是帮助交易所和其它第三方平台包括但不限于非应用中心化应用等搭建充提网关接入主网,上线主资产及基于区块链发行的,例如等。基本原理大部分交易所及第三方平台使用的网关充值提现是一个中心化的应用服务。 SEER交易所及第三方平台充提网关接入指南 本指南主要目的是帮助交易所和其它第三方平台(包括但不限于非SEER DAPPs应用、中心化应用等)搭建...
摘要:进程可以使用函数向进程投递新的任务。当前的进程在调用回调函数时会将进程状态切换为忙碌,这时将不再接收新的,当函数返回时会将进程状态切换为空闲然后继续接收新的。当进程投递的任务在中完成时,进程会通过方法将任务处理的结果发送给进程。 swoole——从入门到放弃(一) 一、swoole的源码包安装 下载swoole源码:git clone https://gitee.com/swoole...
摘要:通信服务提供接口是如何与区块链交互的关键。这通常通过将请求提交给基于或套接字的服务器来完成。初始化时会发生自动检测有时,无法自动检测节点的位置。使用自动检测的示例一些节点提供超出标准的。是套接字的文件系统路径。 通信服务提供接口是web3如何与区块链交互的关键。接口接受JSON-RPC请求并返回响应。这通常通过将请求提交给基于HTTP或IPC套接字的服务器来完成。 如果你已经愉快地连接...
摘要:通信服务提供接口是如何与区块链交互的关键。这通常通过将请求提交给基于或套接字的服务器来完成。初始化时会发生自动检测有时,无法自动检测节点的位置。使用自动检测的示例一些节点提供超出标准的。是套接字的文件系统路径。 通信服务提供接口是web3如何与区块链交互的关键。接口接受JSON-RPC请求并返回响应。这通常通过将请求提交给基于HTTP或IPC套接字的服务器来完成。 如果你已经愉快地连接...
摘要:目录初识创建服务器上创建服务器下异步任务持续更新中。。。什么是异步任务把当前的任务异步投递到进程池中执行,不影响接下来的事务。 目录 初识Swoole 创建服务器(上) 创建服务器(下) 异步任务task 持续更新中。。。 什么是异步任务? 1.把当前的任务异步投递到TaskWorker进程池中执行,不影响接下来的事务。举个栗子: showImg(https://segmentfa...
阅读 1587·2019-08-30 13:18
阅读 1576·2019-08-29 12:19
阅读 2094·2019-08-26 13:57
阅读 4137·2019-08-26 13:22
阅读 1179·2019-08-26 10:35
阅读 2990·2019-08-23 18:09
阅读 2500·2019-08-23 17:19
阅读 675·2019-08-23 17:18