workerman Demo程序是基于telnet socketI協(xié)議;
web-msg-sender-master消息發(fā)送是基于websocket,如何在onGatewayMessage判斷是 TextProtocol 還是 WebSocket?
/**
* 網(wǎng)關(guān)有消息時(shí),判斷消息是否完整
*/
public static function onGatewayMessage($buffer)
{
if( TextProtocol::check($buffer) == 0 ){
return 0;
}eles{//
return WebSocket::check($buffer);
}
}
從這一部分開始,不是很理解;----原因是對(duì)workerman的內(nèi)部ID存儲(chǔ)不是很懂;
// 當(dāng)客戶端第一次發(fā)來數(shù)據(jù)時(shí),需要根據(jù)協(xié)議存儲(chǔ)客戶端列表,IOS協(xié)議一組,WebSocket一組
if(!isset($_SESSION))
{
// 保存session說明已經(jīng)將該client_id寫到對(duì)應(yīng)協(xié)議的client列表中了
$_SESSION = $protocol;
// 將client_id寫入到對(duì)應(yīng)協(xié)議的客戶端列表
your_group_add_fun($protocol , $client);
// 保存這個(gè)client的協(xié)議到集中存儲(chǔ)(例如memcache)中,以便私聊時(shí)用對(duì)應(yīng)的協(xié)議給它發(fā)送數(shù)據(jù)
your_store_client_protocol($client_id, $protocol);
}
// **_廣播消息**_
$new_message = "XXXXXXXXXXXXXXXXXX";
// 獲取IOS客戶端列表
$ios_client_id_array = your_get_client_array_func('IOS');
// 以IOS的協(xié)議向IOS客戶端發(fā)送數(shù)據(jù)
Gateway::sendToAll(yourIOSProtocol::encode($new_message), $ios_client_id_array);
// 獲取websocket客戶端列表
$ws_client_id_array = your_get_client_array_func('WEBSOCKET');
// 以websocket協(xié)議向websocket客戶端發(fā)送數(shù)據(jù)
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);
}