关于Socket和WebSocket互相通信的问题请教

xmfail

workerman Demo程序是基于telnet socketI协议;
web-msg-sender-master消息发送是基于websocket,如何在onGatewayMessage判断是 TextProtocol 还是 WebSocket?

/**
     * 网关有消息时,判断消息是否完整
     */
    public static function onGatewayMessage($buffer)
    {
        if(   TextProtocol::check($buffer) == 0 ){
            return 0;
        }eles{//
            return WebSocket::check($buffer);
        }
    }
3538 4 0
4个回答

xmfail

看了,但中间关于协议存储这块的逻辑不是很明白,写不下去,求助;

  • 暂无评论
walkor 打赏

可以贴下具体哪里不懂

  • 暂无评论
xmfail

从这一部分开始,不是很理解;----原因是对workerman的内部ID存储不是很懂;


// 当客户端第一次发来数据时,需要根据协议存储客户端列表,IOS协议一组,WebSocket一组
if(!isset($_SESSION))
{
     // 保存session说明已经将该client_id写到对应协议的client列表中了
     $_SESSION = $protocol;
     // 将client_id写入到对应协议的客户端列表
     your_group_add_fun($protocol , $client);
     // 保存这个client的协议到集中存储(例如memcache)中,以便私聊时用对应的协议给它发送数据
     your_store_client_protocol($client_id, $protocol);
}

// **_广播消息**_
$new_message = "XXXXXXXXXXXXXXXXXX";

// 获取IOS客户端列表
$ios_client_id_array = your_get_client_array_func('IOS');
// 以IOS的协议向IOS客户端发送数据
Gateway::sendToAll(yourIOSProtocol::encode($new_message),  $ios_client_id_array);

// 获取websocket客户端列表
$ws_client_id_array = your_get_client_array_func('WEBSOCKET');
// 以websocket协议向websocket客户端发送数据
Gateway::sendToAll(Websocket::encode($new_message),  $websocket_client_id_array);

// **_ 私聊 **_
$client_id_to_send = $message;
$protocol = your_get_client_protocol($client_id_to_send);
if(‘IOS’ == $protocol)
{
    $new_message = yourIOSProtocol::encode($new_message);
}
else
{
    $new_message = Websocket::encode($new_message);
}
// 2.1.2版本为Gateway::sendToUid($client_id_to_send, $new_message);
Gateway::sendToClient($client_id_to_send, $new_message);
}
  • 暂无评论
年代过于久远,无法发表回答
×
🔝