
<php
// [ 应用入口文件 ]
namespace think;
// 定义应用目录
define('APP_PATH', __DIR__ '/application/');
// 加载基础文件
require __DIR__ '/thinkphp/basephp';
// 执行应用并响应(绑定当前访问到的模块)
Container::get('app', [APP_PATH])->bind('index/Worker')->run()->send();
方法一,利用GatewayWorker的心跳做
GatewayWorker
GatewayWorker中可以利用心跳来解决这个问题,GatewayWorker有设置客户端多久不回复心跳服务端就关闭连接的属性,可以利用这个机制关闭未及时认证的客户端。
start_gatewayphp
// 心跳间隔
$gateway->pingInterval = 30;
// 发给客户端你的心跳数据
$gateway->pingData = '{"type":"ping"}';
// 客户端在30秒内有1次未回复就断开连接
$gateway->pingNotResponseLimit = 1;
Eventphp
class Event
{
public static function onMessage($client_id, $msg)
{
$msg = json_decode($msg, true);
switch($msg['type'])
{
case 'login':
略
// 记录session,表明认证成功
$_SESSION['login'] = true;
break;
// 30秒后客户端发来心跳回复时,仍然没认证,则关闭连接
case 'pong':
if(empty($_SESSION['login']))
{
Gateway::closeClient($client_id);
}
}
略
}
}
2015-09-13 19:55 添加评论
0
walkor
方法二,利用定时器Timer做
如果是GatewayWorker项目
Eventphp
use Workerman\Lib\Timer;
class Event
{
public static function onConnect($client_id)
{
// 连接到来后,定时30秒关闭这个链接,需要30秒内发认证删除定时器阻止关闭连接的执行
$_SESSION['auth_timer_id'] = Timer::add(30, function($client_id){
Gateway::closeClient($client_id);
}, array($client_id), false);
}
public static function onMessage($client_id, $msg)
{
$msg = json_decode($msg);
switch($msg['type'])
{
case 'login':
略
// 认证成功,删除 30关闭连接定 的时器
Timer::del($_SESSION['auth_timer_id']);
break;
}
略
}
}
如果是Workerman项目
use Workerman\Lib\Timer;
$worker = new Worker('xxx://xxxx:x');
$worker->onConnect = function($connection)
{
// 临时给$connection对象添加一个auth_timer_id属性存储定时器
// 定时30秒关闭连接,需要客户端30秒内发送验证删除定时器
$connection->auth_timer_id = Timer::add(30, function($connection){
$connection->close();
}, array($connection), false);
};
$worker->onMessage = function($connection, $msg)
{
$msg = json_decode($msg, true);
switch($msg['type'])
{
case 'login':
略
// 验证成功,删除定时器,防止连接被关闭
Timer::del($connection->auth_timer_id);
break;
略
}
略
}
当然不能这样了,你框架都没装载,而且所有的 *** 作必须从入口进去,要用URL解析出 MODULE CONTROLLER ACTION,还有一堆常量定义,总之不是那么简单,祝好运还要什么不懂的话,可以去后盾人看看,这样你会明白更多
以上就是关于thinkPHP5.1 版本的怎么不能结合 workerman 了全部的内容,包括:thinkPHP5.1 版本的怎么不能结合 workerman 了、如何关闭规定时间内未认证的连接、workerman 能在thinkphp的框架上使用吗等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)