123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104 |
- <?php
- /**
- * This file is part of workerman.
- *
- * Licensed under The MIT License
- * For full copyright and license information, please see the MIT-LICENSE.txt
- * Redistributions of files must retain the above copyright notice.
- *
- * @author walkor<walkor@workerman.net>
- * @copyright walkor<walkor@workerman.net>
- * @link http://www.workerman.net/
- * @license http://www.opensource.org/licenses/mit-license.php MIT License
- */
- /**
- * 用于检测业务代码死循环或者长时间阻塞等问题
- * 如果发现业务卡死,可以将下面declare打开(去掉//注释),并执行php start.php reload
- * 然后观察一段时间workerman.log看是否有process_timeout异常
- */
- //declare(ticks=1);
- use \GatewayWorker\Lib\Gateway;
- /**
- * 主逻辑
- * 主要是处理 onConnect onMessage onClose 三个方法
- * onConnect 和 onClose 如果不需要可以不用实现并删除
- */
- class Events
- {
- /**
- * 当客户端连接时触发
- * 如果业务不需此回调可以删除onConnect
- *
- * @param int $client_id 连接id
- */
- public static function onConnect($client_id)
- {
- echo "连接成功{$client_id}\n";
- $auth_timer_id = \Workerman\Timer::add(20, function($client_id){
- // echo "未登录断开连接\n";
- Gateway::closeClient($client_id);
- }, array($client_id), false);
- Gateway::updateSession($client_id, array('auth_timer_id' => $auth_timer_id));
- }
-
- /**
- * 当客户端发来消息时触发
- * @param int $client_id 连接id
- * @param mixed $message 具体消息
- */
- public static function onMessage($client_id, $message)
- {
- $_SESSION = Gateway::getSession($client_id);
- $msg = json_decode($message,true);
- if($msg['type'] == 'login'){
- \Workerman\Timer::del($_SESSION['auth_timer_id']);
- Gateway::bindUid($client_id,$msg['userId']);
- Gateway::updateSession($client_id,['userId'=>$msg['userId']]);
- Gateway::sendToClient($client_id, self::cjson('login',[],'登录成功'));
- echo "登录成功\n";
- } else if($msg['type'] == 'ping'){
- Gateway::sendToClient($client_id, self::cjson('pong',[],''));
- return;
- }
- if(!$_SESSION['userId']){ // 未登录
- Gateway::sendToClient($client_id, self::cjson('unlogin',[],'未登录'));
- return;
- }
- switch($msg['type']){
- case 'message':
- break;
- }
- }
-
- /**
- * 当用户断开连接时触发
- * @param int $client_id 连接id
- */
- public static function onClose($client_id){
- Gateway::sendToClient($client_id, self::cjson('close',[],'断开连接'));
- echo "断开连接\n";
- }
- /**
- * 获取响应参数
- * @param string $type
- * @param array $data
- * @param string $msg
- * @return string
- */
- private static function cjson($type='',$data=[],$msg=''){
- $jsonarr = [
- 'type' => $type,
- 'data' => $data,
- 'msg' => $msg
- ];
- return json_encode($jsonarr);
- }
- }
|