目的:网页js发起ws请求链接服务器,ws经过处理后调用 sendMessageByUid TCP链路发送数据给智能设备,等待智能设备响应后将响应结果返回网页客户端。
目前问题:debug模式运行观察,sendMessageByUid 已经运行,但是没有向设备下发任何数据。
如何智能设备数据返回网页客户端,思路也还不是很明确。。望大神指点下
目前做法是这样的
网页客户端
<script type="text/javascript">
var ws;
function connect() {
ws = new WebSocket("ws://127.0.0.1:5678");
ws.onopen = function() {
ws.send('tom');
};
ws.onmessage = function(e) {
alert("收到服务端的消息:" + e.data);
};
}
</script>
服务端
use Workerman\Worker;
use Workerman\Lib\Timer;
require_once './Workerman/Autoloader.php';
/*****************************************************************************************************/
$tcp_worker = new Worker("tcp://0.0.0.0:2346");
$tcp_worker->count = 4;
/*****************************************************************************************************/
/*****************************************************************************************************/
$ws_worker = new Worker('websocket://0.0.0.0:5678');
$ws_worker->count = 1;
// 当有客户端发来消息时执行的回调函数
$ws_worker->onMessage = function($connection, $data)use($ws_worker)
{
//为简单起见,UID直接用m10001代替,下同
sendMessageByUid('m10001','01 02 03 04 05 06 07 08 09');
};
/*****************************************************************************************************/
$tcp_worker->uidConnections = array();
$tcp_worker->onConnect = function($connection)
{
//
};
// 当收到客户端发来的数据后返回hello $data给客户端
$tcp_worker->onMessage = function($connection, $data)
{
//简单起见,直接uid为m10001
$connection->uid = "m"."10001";
$tcp_worker->uidConnections = $connection;
// 这里如何想ws客户端返回信息
};
// 针对uid推送数据
function sendMessageByUid($uid, $message)
{
global $tcp_worker;
if(isset($tcp_worker->uidConnections))
{
$connection = $tcp_worker->uidConnections;
$connection->send($message);
return true;
}
return false;
}
// 运行
Worker::runAll();
发觉是选错方向了。我这样的需求应该选择gatewayworker,而不是workerman
嗯,建议用gatewayworker,多协议通讯很容易实现,支持多进程多服务器部署。
workerman也能做,手册这里有例子:http://doc3.workerman.net/worker-development/listen.html 。
这个例子只能单进程
你好,按照您的方法试了一下,sendMessageByUid('m10001','01 02 03 04 05 06 07 08 09')方法没有发送到硬件网关上面。请问一下您是如何解决的?谢谢