<?php
$server = new swoole_websocket_server("localhost", 9503); //自己在阿里雲後臺開放2345端口
$server->set(array(
'heartbeat_check_interval' =>600,
'heartbeat_idle_time' =>600,
));
global $redis;
$redis = new Redis();
$redis->connect('127.0.0.1', 6379);
$redis->select(11);
$server->on('open', function ($server, $request) {
//綁定uid和fd
$data=$request->get;
$server->push($request->fd,'歡迎你登錄,你的fd是'.$request->fd.'uid='.$data['uid']);
$GLOBALS['redis']->set($data['uid'],$request->fd);
});
$server->on('message', function ($server, $request) {
$resut = json_decode($request->data);
$self_fid= $GLOBALS['redis']->get($resut[0]);//自己
$uidArr= $resut[1];
$t_id_arr=[];
if(strpos($uidArr,",")){
$uidArr=explode(",",$uidArr);
foreach($uidArr as $v){
$t_id_arr[]=$GLOBALS['redis']->get($v);
}
}else{
$t_id_arr[]=$GLOBALS['redis']->get($uidArr);
}
array_push($t_id_arr,$self_fid);
$msg = $resut[0].":".$resut[2];
//發送
foreach ($server->connections as $conn){
if(in_array($conn,$t_id_arr)){
$server->push($conn,$msg);
}
}
});
$server->on('close', function ($server, $fd) { //離開
echo "{$fd} 下線了\n";
unset($GLOBALS['fd'][$fd]);
});
$server->start();
客戶端
<html>
<head>
<meta charset="UTF-8">
<title>chat2</title>
<script src="https://cdn.bootcss.com/jquery/3.4.1/jquery.min.js"></script>
<script type="text/javascript">
var wsServer = 'ws://43.142.145.59:9503'; //服務器地址
var websocket; //創建WebSocket對象
function connect(){
var uid=$("#myuid").val();
wsServer = wsServer+'?uid='+uid; //服務器地址
websocket = new WebSocket(wsServer); //創建WebSocket對象
initSocket();
}
function initSocket(){
websocket.onopen = function (evt) {
//已經建立連接
$('#send').on('click',function(){
var msg = $('#msg').val();
if(msg == '')
{
alert('不能發送空消息');
return ;
}
var arr =Array();
arr[0]=$("#myuid").val(); //自己
arr[1]=$("#uid").val(); //發給誰
arr[2]=msg; //內容
var str = JSON.stringify(arr);
websocket.send(str);
});
};
websocket.onclose = function (evt) {
//已經關閉連接
};
websocket.onmessage = function (evt) {
//收到服務器消息,使用evt.data提取\
console.log(evt.data)
$("#content").append(evt.data+"<br>");
};
websocket.onerror = function (evt) {
//產生異常
};
}
function send(){
$msg = $('#msg').val();
websocket.send($msg);
}
</script>
</head>
<body>
<div id="content" style="border:1px #ccc solid;width:300rpx;height:500px;">
聊天框
</div>
設置自己的UID<input id="myuid" type="text" name="uid">
<input id="send2" type="button" name="" onClick="connect()" value="鏈接">
<div>
發給UID:<input id="uid" type="text" name="uid">
發送內容:
<input id="msg" type="text" name="msg">
<input id="send" type="button" name="" value="單發">
</div>
</body>
</html>