// 当客户端连接上来时,设置连接的onWebSocketConnect,即在websocket握手时的回调
$gateway->onConnect = function($connection)
{
$connection->onWebSocketConnect = function($connection , $http_header)
{
// 可以在这里判断连接来源是否合法,不合法就关掉连接
// $_SERVER['HTTP_ORIGIN']标识来自哪个站点的页面发起的websocket链接
if($_GET['token'] != '123uji')
{
$connection->close();
}
// onWebSocketConnect 里面$_GET $_SERVER是可用的
// var_dump($_GET);
};
};
前端JS
// 连接服务端
function connect() {
// 创建websocket
ws = new WebSocket("ws://"+document.domain+":7272?token=123uji2");
// 当socket连接打开时,输入用户名
ws.onopen = onopen;
// 当有消息时根据消息类型显示不同信息
ws.onmessage = onmessage;
ws.onclose = function() {
console.log("连接关闭,定时重连");
connect();
};
ws.onerror = function() {
console.log("出现错误");
};
}
拒绝后为什么控制台
client:51.55.41.246:59034 gateway:127.0.0.1:7272 client_id:7f00000108fd00000038 onClose:''
一直跑这个。。
PC我看会定时重连间隔1S左右
用手机一打开网页直接1S 10来条
你这个问题问得有点那啥了,这个明显是你业务逻辑有bug啊。
客户端onclose执行了重连,服务端判断token不对就断开,然后客户端重连,服务端再次判断token不对继续断开,重连,断开,重连,断开。。。。控制台就打印很多日志喽。。。
你服务断开的时候给客户端发个数据,告诉客户端你token不对,别TM再连了。
好来
不对啊,都还没建立连接,如何给他发数据。。
怎么就没建立呢,没建立你为啥调用$connection->close();?就在调用$connection->close();前发啊。。。。