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