// 當(dāng)客戶(hù)端連接上來(lái)時(shí),設(shè)置連接的onWebSocketConnect,即在websocket握手時(shí)的回調(diào)
$gateway->onConnect = function($connection)
{
$connection->onWebSocketConnect = function($connection , $http_header)
{
// 可以在這里判斷連接來(lái)源是否合法,不合法就關(guān)掉連接
// $_SERVER['HTTP_ORIGIN']標(biāo)識(shí)來(lái)自哪個(gè)站點(diǎn)的頁(yè)面發(fā)起的websocket鏈接
if($_GET['token'] != '123uji')
{
$connection->close();
}
// onWebSocketConnect 里面$_GET $_SERVER是可用的
// var_dump($_GET);
};
};
前端JS
// 連接服務(wù)端
function connect() {
// 創(chuàng)建websocket
ws = new WebSocket("ws://"+document.domain+":7272?token=123uji2");
// 當(dāng)socket連接打開(kāi)時(shí),輸入用戶(hù)名
ws.onopen = onopen;
// 當(dāng)有消息時(shí)根據(jù)消息類(lèi)型顯示不同信息
ws.onmessage = onmessage;
ws.onclose = function() {
console.log("連接關(guān)閉,定時(shí)重連");
connect();
};
ws.onerror = function() {
console.log("出現(xiàn)錯(cuò)誤");
};
}
拒絕后為什么控制臺(tái)
client:51.55.41.246:59034 gateway:127.0.0.1:7272 client_id:7f00000108fd00000038 onClose:''
一直跑這個(gè)。。
PC我看會(huì)定時(shí)重連間隔1S左右
用手機(jī)一打開(kāi)網(wǎng)頁(yè)直接1S 10來(lái)?xiàng)l
你這個(gè)問(wèn)題問(wèn)得有點(diǎn)那啥了,這個(gè)明顯是你業(yè)務(wù)邏輯有bug啊。
客戶(hù)端onclose執(zhí)行了重連,服務(wù)端判斷token不對(duì)就斷開(kāi),然后客戶(hù)端重連,服務(wù)端再次判斷token不對(duì)繼續(xù)斷開(kāi),重連,斷開(kāi),重連,斷開(kāi)。。。。控制臺(tái)就打印很多日志嘍。。。
你服務(wù)斷開(kāi)的時(shí)候給客戶(hù)端發(fā)個(gè)數(shù)據(jù),告訴客戶(hù)端你token不對(duì),別TM再連了。
怎么就沒(méi)建立呢,沒(méi)建立你為啥調(diào)用$connection->close();?就在調(diào)用$connection->close();前發(fā)啊。。。。