【2022/1/4】TCP和websocket通讯

本文介绍了一种使用PHP的Workerman库,通过WebSocket服务端与TCP连接结合,实现在网页上控制硬件设备及显示设备信息的方法。在Worker启动时,创建两个TCP进程并将其添加到WebSocket的属性中,当WebSocket接收到消息时,将消息广播到所有TCP连接,实现双向通信。
摘要由CSDN通过智能技术生成

TCP和websocket通讯

使用场景:通过网页控制硬件设备,或者硬件设备的信息显示到网页上

所用技术

  1. PHP环境
  2. workerman

实现原理

启动一个websocket服务端,进程启动的时候启动tcp,把tcp设置为websocket的一个属性上socketArray,然后在websocket接受消息的回调里获取socketArray,循环取出tcp链接,发送消息

代码

<?php
use Workerman\Worker;

require_once __DIR__ . '/vendor/autoload.php';

$websocket = new Worker('Websocket://0.0.0.0:8888');
$websocket->count = 1;
$websocket->onWorkerStart = function ($websocket) {
    // 启动第一个tcp进程
    $tcp1 = new Worker('tcp://0.0.0.0:6000');
    // 设置到socketArray属性上
    $websocket->tcpArray[] = $tcp1;
    $tcp1->listen();

    // 启动第二个tcp
    $tcp2 = new Worker('tcp://0.0.0.0:6001');
    $websocket->tcpArray[] = $tcp2;
    $tcp2->listen();
};

// 接受websocket消息后转发给tcp
$websocket->onMessage = function ($conn, $data) {
    global $websocket;

    foreach($websocket->tcpArray as $tcpItem)
    {
        foreach ($tcpItem->connections as $tcpConn) {
            $tcpConn->send($data);
        }
    }
};

Worker::runAll();

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值