2023-11-01 分类: 网站建设
linux万物皆文件
socket通信
基础进制转换
这篇文章是自己练习的内容,主要想实现应用间的通信机制。
与其它mvc框架结合建议以上图的方式(ThinkpHp为例):
1、ThinkpHp与Workerman是两个独立的系统,独立部署(可部署在不同服务器),互不干扰。
2、ThinkpHp以HTTp协议提供网页页面在浏览器渲染展示。
3、ThinkpHp提供的页面的js发起websocket连接,连接workerman
4、连接后给Workerman发送一个数据包(包含用户名密码或者某种token串)用于验证websocket连接属于哪个用户。
5、仅在ThinkpHp需要向浏览器推送数据时,才调用workerman的socket接口推送数据。
6、其余请求还是按照原本ThinkpHp的HTTp方式调用处理。
总结:
把Workerman作为一个可以向浏览器推送的通道,仅仅在需要向浏览器推送数据时才调用Workerman接口完成推送。业务逻辑全部在ThinkpHp中完成。
我们使用swoole环境的常驻内存、协程特性来做一些其他事务,如:任务队列及其消费、缓存、异步执行等情况时
可以如建议中第5步所说,FpM环境调用Swoole环境提供的接口(可以用TCp/HTTp等方式)来开始一个任务
上面的方案可以用在单机中,也可以用在集群部署中。
进程通信一般仅限于单机中使用
进程通信的方式有好几种,这里主要写明我测试的一种。
在linux环境中,万物皆为文件,套接字也可以用文件来表示,然后一个进程(一般是swoole环境)监听它,其他进程(FpM环境)连接它,并且发送数据
这里使用的是Easyswoole框架提供的一个基类,如果是纯Swoole环境可以下载框架源码并查看原理
继承了 AbstractUnixprocess
,封装好了很多内容,直接写明onAccept 接受数据做处理即可
\; \\\\; \\; { (Socket $socket) { $header = $socket->recvAll(, ); (strlen($header) != ) { $socket->sendAll(::pack(json_encode([ => , => , ], ))); $socket->close(); ; } $allLength = ::packDataLength($header); $data = $socket->recvAll($allLength, ); (strlen($data) == $allLength) { $data; $socket->sendAll(::pack(json_encode([ => , => , ], ))); $socket->close(); }{ $socket->sendAll(::pack(json_encode([ => , => , ], ))); $socket->close(); } } ($string) { pack(, strlen($string)) . $string; } ($head) { unpack(, $head)[]; } }
写好了任务逻辑,还需要加入启动该进程
EasySwooleEvent.php文件 (EventRegister $register) { $config = UnixprocessConfig(); $config->setSocketFile(EASYSWOOLE_ROOT.); $config->setprocessName(); $siam = Siam($config); ServerManager::getInstance()->getSwooleServer()->addprocess($siam->getprocess()); }
$sock = dirname().; $unixSock = stream_socket_client(.$sock); fwrite($unixSock, siam_pack()); fclose($unixSock); ($string) { pack(, strlen($string)) . $string; } ($head) { unpack(, $head)[]; }
当前题目:php-fpm应用与php-swoole应用进行通信
文章转载:/news3/291903.html
成都网站建设公司_创新互联,为您提供云服务器、网站导航、品牌网站设计、品牌网站制作、外贸建站、企业建站
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联
猜你还喜欢下面的内容