博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
yii2-swoole-websocket, 支持JSONRPC通过WS、HTTP、Redis投递异步任务到worker
阅读量:5914 次
发布时间:2019-06-19

本文共 1943 字,大约阅读时间需要 6 分钟。

示例:

聊天室案例, 示例代码: /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!"}}}')

升级中, 可能继续新增http session, auth, 丰富配置, 以及简化web app向swoole worker投递异步任务机制...

转载地址:http://xcwvx.baihongyu.com/

你可能感兴趣的文章
Eclipse 的快捷键以及文档注释、多行注释的快捷键
查看>>
GridView视图(BaseAdapter)
查看>>
[Everyday Mathematics]20150117
查看>>
kill me heal me的链接
查看>>
集团企业信息化参考一
查看>>
RedHat Linux 下安装MPlayer 编译源代码方式
查看>>
一个排序算法的解析
查看>>
【HDU】1848 Fibonacci again and again
查看>>
老鸟的Python新手教程
查看>>
关于前端开发的20篇文档与指南
查看>>
程序员保持快乐活跃的6个好习惯(转)
查看>>
【转】linux /usr/bin/ld cannot find 解决
查看>>
T-SQL技术收集——删除重复数据
查看>>
SQL中各数据类型的长度、精度
查看>>
openfire群消息投递
查看>>
MySql(十):MySQL性能调优——MySQL Server性能优化
查看>>
(原創) 11/10/1982 セカンド・ラブ (中森明菜)
查看>>
(原創) 如何將string轉成integer? (SOC) (Verilog PLI)
查看>>
DevExpress VCL的多语言支持文件
查看>>
C语言的谜题
查看>>