一、
按照手册如下代码,建立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();
}
报错1是因为$iot_connection是个null,不是对象,$iot_connection->http_connection = $http_connection;是对象的用法。
报错2是因为$iot_connection->http_connection不存在
您好,请问:报错2是因为$iot_connection->http_connection不存在 有什么解决办法吗?
您好,请问:Notice: Trying to get property of non-object”,也就是“$iot_connection->http_connection->send($data);” 是怎么解决的?