PHP socket構造類似QQ通信

socket通信過程原理圖

PHP socket構造類似QQ通信

服務端

set_time_limit(0);
$ip = '127.0.0.1';
$port = 8091;

/**
 +------------------------
 * socket服務端通行過程
 +------------------------
 * @socket_create  創建socket資源
 * @socket_bind    綁定IP和端口
 * @socket_listen  監聽
 * @socket_accept  接收,創建子進程通信
 * @socket_read    讀取消息
 * @socket_write   寫消息
 * @socket_close   關閉socket資源
 */
$socket = socket_create(AF_INET,SOCK_STREAM,SOL_TCP);
$r = socket_bind($socket,$ip,$port);
$r = socket_listen($socket,4);
do{
    $sock = socket_accept($socket);
    $i = (int)$sock;
    $wm = '';
    $rm = socket_read($sock,1024);
    list($rid,$sid,$msg) = explode('|',$rm);
    //TODO 以接收人$rid爲redis的key將json_encode([$sid,$msg,time()])存入redis;
    //TODO 以發送人$sid爲redis的key從redis中獲取消息$rsm,$wm = implode('|',json_decode($rsm,true))
    socket_write($sock,$wm);
    socket_close($sock);
}while(true);
socket_close($socket);

客戶端

set_time_limit(0);
$ip = '127.0.0.1';
$port=8091;

/**
 +--------------------------
 * 客戶端socket連接過程
 +--------------------------
 * @socket_create   創建socket套接字
 * @socket_connect  連接服務端ip和端口
 * @socket_write    發送消息
 * @socket_read     讀取消息
 * @socket_close    關閉socket
 */

$socket = socket_create(AF_INET,SOCK_STREAM,SOL_TCP);
socket_connect($socket,$ip,$port);
$rid = 100001;//接收人
$sid = 100002;//發送人
$sm = 'QQ test!';//消息
$wm = $rid.'|'.$sid.'|'.$sm.PHP_EOL;
socket_write($socket,$wm);
$rm = socket_read($socket,1024);
list($sid,$msg,$t) = explode('|',$rm);//解析服務端發回的消息
var_dump([$sid,$msg,$t]);
socket_close($socket);

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章