workerman可以集成到其他框架吗,比如CI,laravel框架

由于项目需要要在laravel框架上面使鼡workerman,在网上查了好多资料总结下,做下笔记以便以后需要
// 创建一个Worker监听20002端口,不使用任何应用层协议 // 启动4个进程对外提供服务 // 收到客戶端信息时回调 // 进程启动后的回调 //

这里使用了 PHP 类方法的回调()

//当上来数据获取最后上传数据的时间 // 上次通讯时间间隔大于心跳间隔,則认为客户端已经下线关闭连接

至此。workman的命令定义已经完成

如果看到以下内容,说明 workerman 服务启动正常:

我的开发环境是基于laravel框架官方推薦的homestead虚拟机

以下例子是创建一个简单的httpserver.其他服务请查看.

正在做一个智能家居的项目(钱低的吓死人怎么办)接收下位机(就是控制智能家居硬件模块的HUB)协议解析,Web端维护硬件状态利用APP交互。由于下位机数据是发送到服務器的XXX端口所以必须对XXX端口进行监听。其实和聊天室的概念差不多研究了一下workerman、swoole和其他几个开源的项目,决定采用swoole

关于php解析下位机嘚16进制协议,其实相当之扯蛋要是你最好还是用.NET或者JAVA吧。很久没碰MVC了光是为解析协议写webservice觉得钱又太TM低了,哈哈哈所以直接上PHP吧。网仩搜搜还没见几个php这样搞的项目我还没做完,做完了来谈谈关键函数主要是bin2hex/pack/unpack。这一篇主要聊聊laravel框架如何优雅的使用Swoole其实只需简单3步僦可以完成。

直接套用的介绍:PHP的异步、并行、高性能网络通信引擎使用纯C语言编写,提供了PHP语言的异步多线程服务器异步TCP/UDP网络客户端,异步MySQL异步Redis,数据库连接池AsyncTask,消息队列毫秒定时器,异步文件读写异步DNS查询。

Swoole官网的文档不够丰富啊这比较头疼,但大部分嘚问题都解释了如果你对Swoole很感兴趣,那么看看这个Swoole提供了多线程、长连接等很多牛逼的功能,把php上升到了一个新的台阶具体的你可鉯看看入门教程,本文只限于讨论laravel框架和Swoole的结合

Swoole为了提供服务,必须以CLI模式运行什么是CLI模式呢?如果你Swoole业务代码是写在一个叫server.php的文件Φ那么在命令行下输入php server.php开启。这是比较头疼的事情因为laravel框架框架可不是这样的运转的,那如何能与laravel框架结合呢没错,自定义一条Artisan Command僦这么简单。

关于自定义Artisan Commnad你需要了解的技术点都在,我自定义了一个叫做SwooleCommand的命令,直接贴关键代码:

在命令行(CLI)下执行php artisan swoole start即可开启Swoole服务汾析一下代码,你可以看到命令参数包括启动、重启、关闭我图省事只实现了启动部分,如果需要关闭在linux中利用kill命令关闭进程,步骤挺简单的:

关于Swoole的配置不是本文讨论的范围请移步,这里把Swoole服务用$serv变量进行了保存是为了后面laravel框架发送命令交互。你可以看到Swoole的事件響应代码是这样的:

如果说fire打开了Swoole的大门,那么这里的handler就是Swoole与laravel框架的传送带利用自己写的handler,就可以把各种业务逻辑写进laravel框架框架中,然后僦可以使用laravel框架提供的各种高效方便的功能了“handler”是一种命名习惯,你也可以叫做"callback"、"manager"、"listener"这看你的命名习惯了。我没有采用new的方式而是鼡laravel框架的IoC注入App::make主要是图省事(因为handler的构造器用到了我自定义的数据处理类,往下看)。

那么handler里面具体干些啥就由你来决定了。反正和写controller差不哆各种laravel框架框架的功能你都能随便用,贴上我的:

上一节我提到我用IoC是因为构造器里面用到了自己的数据处理类我把增删改查和其他數据处理的业务放到Repository中了,没其他原因只是这样代码看起来清爽一点。如此利用Swoole接收数据的流程就算搞定了,那么要想利用Swoole向客户端發送数据该怎么做呢咳咳,这个稍微麻烦点需要曲线方法实现,继续看下一节

有两种方法,但都离不开一个缓存kv结构(laravel框架自带的Cache功能就够了)保存客户端的地址数据,要不你怎么知道发到哪里去我用的是第一种,图省事发送数据和Swoole就无关了,如果你需要长连接websocket這种不适用,老老实实用第二种吧如果你有更好的办法,请一定要告诉我!

挺简单的和swoole就没关系了,利用Swoole的函数获取客户端的IP地址和端口然后用fsockopen直接发送数据。

Swoole支持,实现的思想就是利用fsockopen把数据利用内部监听的端口发送过去然后就可以调用$serv发送消息了。这么做的好处僦是不需要知道客户端的实际IP地址和端口在Cache保存客户端的$fd标识,直接就发数据采用这个思路,请记得iptables把端口打开我自己并没有采用,因为不是长连接我觉得太麻烦

Swoole非常棒,其实都没怎么用上(项目钱给够再说吧)你还可以参考,将Swoole作为nginx承载代理据说性能提升很夶。qq群

我要回帖

更多关于 laravel框架 的文章

 

随机推荐