udp监听与发送

sogan

一、
按照手册如下代码,建立UDP监听:

$udp_worker = new Worker('udp://127.0.0.1:9090');
$udp_worker->onMessage = function($connection, $data){
    var_dump($data);
    $connection->send('get');
};
Worker::runAll();

问题:如何实现多个客户端的udp返回数据,也就是 $connection->send('get'); 如何给指定IP和port发送数据?

二、
编写如下代码。
_功能:ws和udp之间互相转换;_
操作1:用websocket在线测试工具向workerman发送数据结果报错;
报错1:“Warning: Creating default object from empty value ”,也就是“$iot_connection->http_connection = $http_connection;”有问题。
操作2:用udp测试工具向workerman发送数据结果报错;
报错1:“Notice: Trying to get property of non-object”,也就是“$iot_connection->http_connection->send($data);”有问题。

<?php

use Workerman\Worker;

require_once __DIR__ . '/vendor/workerman/Autoloader.php';

// 通信协议
$iot_worker = new Worker("udp://0.0.0.0:9001");

// 启动1个进程对外提供服务
$iot_worker->count = 1;

$iot_worker->onWorkerStart = function () {

    $inner_worker = new Worker('websocket://0.0.0.0:9090');

    // 设置端口复用,可以创建监听相同端口的Worker(需要PHP>=7.0)
    $inner_worker->reusePort = true;
    $inner_worker->onMessage = function ($http_connection, $data) {

        $http_connection->send($data);

        global $iot_connection;
        $iot_connection->http_connection = $http_connection;
    };
    $inner_worker->listen();
};

//udp收到数据
$iot_worker->onMessage = function ($iot_connection, $data) {
    //----start----
    var_dump($data);
    //返回给udp
    $iot_connection->send($data);
    //发送给websocket
    global $iot_connection;
    $iot_connection->http_connection->send($data);
    //----end------
};

// 如果不是在根目录启动,则运行runAll方法
if (!defined('GLOBAL_START')) {
    Worker::runAll();
}
6817 2 1
2个回答

walkor 打赏

报错1是因为$iot_connection是个null,不是对象,$iot_connection->http_connection = $http_connection;是对象的用法。

报错2是因为$iot_connection->http_connection不存在

  • 守护 2018-11-21

    您好,请问:报错2是因为$iot_connection->http_connection不存在 有什么解决办法吗?

守护

您好,请问:Notice: Trying to get property of non-object”,也就是“$iot_connection->http_connection->send($data);”  是怎么解决的?

  • 暂无评论
年代过于久远,无法发表回答
×
🔝