想要实现:设备通过tcp连接服务器,框架用的是worker或者gateway

发布于 2022-09-07 22:38:02 字数 86 浏览 25 评论 0

想要实现:设备通过tcp连接服务器,服务器实时处理以后实时转发消息给某个网页(可以用websocket),框架用的是worker或者gateway,求高人指点

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

梦幻的味道 2022-09-14 22:38:02

有几种方式可以做到
1、最简单的方式,开一个worker进程即监听tcp,又监听websocket,这样在一个进程里方便互相操作连接传递数据

use Workerman\Worker;
// 监听tcp端口,硬件连这个端口
$iot_worker = new Worker('tcp://0.0.0.0:1234');
// 两个协议互通这种方式只能单进程
$iot_worker->count = 1;
// 进程启动时增加一个5678端口的websocket协议的监听,网页用ws连5678端口
$iot_worker->onWorkerStart = function(){
    // 声明为全局变量,方便其它地方获取到这个容器对象
    global $ws_worker;
    // 监听5678端口,协议websocket
    $ws_worker = new Worker('websocket://0.0.0.0:5678');
    // 网页ws发来数据的时候的处理,可根据需要做处理,这里省略
    $ws_worker->onMessage = function($ws_connection, $data){...};
    $ws_worker->listen();
};
// 硬件发来消息的回调
$iot_worker->onMessage = function($connection, $data){
    // 得到$ws_worker容器
    global $ws_worker;
    // 遍历容器里的连接给所有网页推送硬件发来的数据
    foreach($ws_worker->connections as $ws_connection) {
        $ws_connection->send($data);
    }
};
// 启动workerman
Worker::runAll();

以上好处架构清晰简单,但是只能单进程
参考手册 http://doc.workerman.net/work...

2、开A B两组worker进程,A组进程监听tcp,B组进程监听websocket,利用channel通讯,可以参考workerman手册
http://doc.workerman.net/comp...
http://doc.workerman.net/comp...
好处是可以分布式部署,可以多进程多服务器集群

3、用gatewayWorker,开一组tcp端口的gateway进程+一组websocket的进程,参考手册
http://doc2.workerman.net/mul...
好处是同样可以分部署部署,可以多进程多服务器集群,并且gatewayWorker提供了很多长连接直接可以用的接口,非常方便

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文