一、
按照手冊(cè)如下代碼,建立UDP監(jiān)聽(tīng):
$udp_worker = new Worker('udp://127.0.0.1:9090');
$udp_worker->onMessage = function($connection, $data){
var_dump($data);
$connection->send('get');
};
Worker::runAll();
問(wèn)題:如何實(shí)現(xiàn)多個(gè)客戶端的udp返回?cái)?shù)據(jù),也就是 $connection->send('get'); 如何給指定IP和port發(fā)送數(shù)據(jù)?
二、
編寫(xiě)如下代碼。
_功能:ws和udp之間互相轉(zhuǎn)換;_
操作1:用websocket在線測(cè)試工具向workerman發(fā)送數(shù)據(jù)結(jié)果報(bào)錯(cuò);
報(bào)錯(cuò)1:“Warning: Creating default object from empty value ”,也就是“$iot_connection->http_connection = $http_connection;”有問(wèn)題。
操作2:用udp測(cè)試工具向workerman發(fā)送數(shù)據(jù)結(jié)果報(bào)錯(cuò);
報(bào)錯(cuò)1:“Notice: Trying to get property of non-object”,也就是“$iot_connection->http_connection->send($data);”有問(wèn)題。
<?php
use Workerman\Worker;
require_once __DIR__ . '/vendor/workerman/Autoloader.php';
// 通信協(xié)議
$iot_worker = new Worker("udp://0.0.0.0:9001");
// 啟動(dòng)1個(gè)進(jìn)程對(duì)外提供服務(wù)
$iot_worker->count = 1;
$iot_worker->onWorkerStart = function () {
$inner_worker = new Worker('websocket://0.0.0.0:9090');
// 設(shè)置端口復(fù)用,可以創(chuàng)建監(jiān)聽(tīng)相同端口的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收到數(shù)據(jù)
$iot_worker->onMessage = function ($iot_connection, $data) {
//----start----
var_dump($data);
//返回給udp
$iot_connection->send($data);
//發(fā)送給websocket
global $iot_connection;
$iot_connection->http_connection->send($data);
//----end------
};
// 如果不是在根目錄啟動(dòng),則運(yùn)行runAll方法
if (!defined('GLOBAL_START')) {
Worker::runAll();
}
您好,請(qǐng)問(wèn):Notice: Trying to get property of non-object”,也就是“$iot_connection->http_connection->send($data);”? 是怎么解決的?