thinkPHP5.1 版本的怎么不能结合 workerman 了

thinkPHP5.1 版本的怎么不能结合 workerman 了,第1张

<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的框架上使用吗等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://www.54852.com/web/9482228.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-28
下一篇2023-04-28

发表评论

登录后才能评论

评论列表(0条)

    保存