Swoole整合ThinkPHP3.2系列教程三
来源:互联网 发布:电视在线直播源码 编辑:程序博客网 时间:2024/05/29 11:30
使用说明:
作为管理员:
0.安装swoole扩展
swoole项目已收录到PHP官方扩展库,直接使用:
- pecl install swoole
1.启动swoole服务
在cli模式下,进入Swoole目录,执行以下命令行:
- php swoole.php start
2.柔性重启swoole服务
用于SwooleController框架里的代码更新时,执行以下命令行重新加载代码:
- php swoole.php reload
3.关闭swoole服务
- 直接用kill命令杀死swoole主进程即可(除非特殊情况),一般使用柔性重启就会重启worker进程
4.常用的一些命令:
- lsof -i:9501 查看端口的使用情况
- ps -aux|grep swoole 查看swoole的进程(通常是有一共会创建2 + n + m个进程,其中n为Worker进程数,m为TaskWorker进程数,2为一个Master进程和一个Manager进程,需要修改worker进程和task进程的数量,修改Server.php里的option)
作为开发者:
- 尽管放心大胆地把你的耗时操作的业务逻辑代码写到Cli模块下的SwooleController里。
- 当浏览器需要请求耗时任务之前,必须去业务服务器swooleLog表里备案一下,即获取xn_swoole_log表里的ID,携带这个ID去请求swoole服务,否则swoole忽略此次请求,但并不会关闭连接。
- 我们约定请求耗时操作或者任务的过程按照如下规则进行:
1. 浏览器请求业务服务器,备案此次操作,主要包括耗时操作的function名字以及参数存入业务服务器那边的SwooleLog表(注意重复任务不要多次提交,记得排重)2. 业务服务器返回浏览器swoole服务的连接地址,以及备案的log_id3. 浏览器收到业务服务器的返回值以后,创建websocket客户端:ws = new WebSocket(config.server+'?uid=1');//请求的连接地址使用get请求加上uid请求swoole服务执行该任务我们约定请求swoole时的数据格式按如下规则统一:{ cmd:"test" ,//SwooleController里必须有对应的方法名称, args:{ id: 1,//SwooleLog表里的id ...//其他需要携带的参数 }}4. 处理websocket收到消息时的回调wx.onmessage=function(e){ var message = JSON.parse(e.data);}
swoole服务的返回值
附上一份JS版的websocket代码案例(暂不支持低版本IE,近期会想办法解决)
function swooleClient(){ var config = { 'server' : 'ws://192.168.0.166:9501', }; var ws = {}; $(document).ready(function () { ws = new WebSocket(config.server+'?uid=1'); listenEvent(); }); function listenEvent() { /** * 连接建立时触发 */ ws.onopen = function (e) { //连接成功 console.log("connect webim server success."); //发送登录信息 ws.send(JSON.stringify({ cmd : 'test', args : { id : 3, name: '哈哈' } })); }; //有消息到来时触发 ws.onmessage = function (e) { console.log(e); var message = JSON.parse(e.data); $(document.body).html("<h1 style='text-align: center'>"+message.info+"</h1>"); }; /** * 连接关闭事件 */ ws.onclose = function (e) { $(document.body).html("<h1 style='text-align: center'>连接已断开,请刷新页面重新登录。</h1>"); }; /** * 异常事件 */ ws.onerror = function (e) { $(document.body).html("<h1 style='text-align: center'>服务器"+ ": 拒绝了连接. 请检查服务器是否启动. </h1>"); console.log("onerror: " + e.data); }; }
阅读全文
0 0
- Swoole整合ThinkPHP3.2系列教程三
- Swoole整合ThinkPHP3.2系列教程一
- Swoole整合ThinkPHP3.2系列教程二
- Swoole整合ThinkPHP3.2系列教程四
- Swoole整合ThinkPHP3.2系列教程六
- Swoole整合ThinkPHP3.2系列教程五
- ThinkPHP3.0整合UCenter教程(一)
- ThinkPHP3.0整合UCenter教程(一)
- ThinkPHP3.1.2整合UCenter详解(三)
- ThinkPHP3.1.2整合UCenter详解(三)
- ThinkPHP3.2视频学习教程
- thinkphp3.2整合第三方模版备忘
- Thinkphp3.2整合微信支付
- Thinkphp3.2 整合PHPMailer发送邮件
- ThinkPHP3.2整合七牛云第三方sdk
- ThinkPHP3.2整合七牛云第三方sdk
- thinkphp3.2和Workerman 源码整合
- thinkphp3.2上传方法使用教程
- Android开发 打开文件 选择文件对话框
- 《并发编程》--12.读写锁
- @RequestParam与@PathVariable的区别
- 调用finish()的意义
- 利用递推快速计算方差和均值
- Swoole整合ThinkPHP3.2系列教程三
- JDBC编程指南
- RxAndroid+Retorfit实现数据请求
- javaseday33补充2(图片漂浮 签名图片内显示文字)
- 线程的执行状态图
- java中的继承语法
- 发布开源库到 JitPack.io + jcenter
- 一种使RecycleView禁止滑动的方法
- java调用oracle存储过程 传递 自定义数组,对象