想实现一个网页发起请求,发送数据给智能设备,并获取返回的模式,不成功,请教。

huboy

目的:网页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();
2722 3 1
3个回答

huboy

发觉是选错方向了。我这样的需求应该选择gatewayworker,而不是workerman

  • 暂无评论
walkor

嗯,建议用gatewayworker,多协议通讯很容易实现,支持多进程多服务器部署。

workerman也能做,手册这里有例子:http://doc3.workerman.net/worker-development/listen.html
这个例子只能单进程

  • 暂无评论
wuhe6

你好,按照您的方法试了一下,sendMessageByUid('m10001','01 02 03 04 05 06 07 08 09')方法没有发送到硬件网关上面。请问一下您是如何解决的?谢谢

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