乐趣区

关于thinkphp:202214TCP和websocket通讯

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();

退出移动版