Worker web 与Worker Socket交互

wuchuguang

情况是这样的:

$web = new WebServer();
$app = new Worker("xxx://0.0.0.0:8383")

启动后另一个客户端连接了这个$app的端口,
$clientA $clientB $clientC

web有个login.php页面,想在这里直接给写xxx协议给$clientA或$ClientB或$ClientC任意一个客户端发消息。

别人都说用GateWay可以做到,我也下了小蝌蚪源码来看,感觉并不是我说的这个功能,从配置上来说都比我说的业务麻烦很多。
我自已也写了个把$ClientA ..C存到Store里去,但$clientA是用AsynTcpConnection做的,有onMessage,onClose这些匿名函数,存不了Store

2977 2 0
2个回答

walkor

web 的login.php 里面建立一个socket,连$app worker,然后按照你的协议约定个格式,发送数据。
比如格式为 {"type":"send_to_client", "client":"clientA", "content":"blabla..."},$app收到这个格式的数据,就知道是给clientA发送数据"balbal...",然后找到clientA的connection 发送即可

  • wuchuguang 2015-05-19

    $app worker这边收到数据后,$app这边怎么找到ClientA..C。因为这里是worker->onMessage(TcpConnection $conn, $data)
    {

    }

walkor

给你个代码片段

$app = new Worker('websocket://0.0.0.0:8484');
$app->onMessage = function($connection, $data){
    global $conn_array;
    // 假设data中传递了uid
    $uid = $data;
    // 这样就把uid到connection的关系映射起来了
    $conn_array = $connection;
};

// 给某个uid推送
function send_to_uid($uid, $data)
{
    global $conn_array;
    $conn_array->send($data);
}

// 广播
function broadcast($data)
{
    global $conn_array;
    foreach($conn_array as $con)
    {
        $con->send($data);
    }
}
  • 暂无评论
年代过于久远,无法发表回答
🔝