Selaa lähdekoodia

把CodeGen添加到忽略文件,维护下刷表接收代码kvflush.php

gwang 4 vuotta sitten
vanhempi
commit
36975feeee

+ 1 - 1
.gitignore

@@ -4,7 +4,7 @@
 
 # cdn folder
 /CDN/
-/CodeGen/
+/CodeGen/*.php
 
 # User-specific stuff:
 .idea/**/workspace.xml

+ 1 - 1
Gameserver/Amfphp/model/Const/GameConfig.php

@@ -4,7 +4,7 @@
  // 由CodeGenerator创建。
  // Copyright (C) gwang (wanggangzero@qq.com), Loyalsoft@sjz Inc
  // author: gwang 
- // 日期: 2020-11-27 11:39:41
+ // 日期: 2020-11-27 13:54:09
 ////////////////////
 
 /**

+ 59 - 41
Gameserver/Amfphp/service_call/cmemdata/kvflush.php

@@ -5,15 +5,18 @@ namespace loyalsoft;
 include_once __DIR__ . '/../../main.php';
 require_once ROOTDIR . '/util/OpenSSLVerify.php';                               # Ps. 这个文件和类名没有对应关系.
 
-define("CLOGUTIL_DEBUG", true);
 
 /**
  * Description of config
  * 数据中转功能.
  * 通过远程地址向服务器刷入Cmem的key-value数据. key和value通过gzcompress和base64处理.
  * @version
- *          1.0.1  通过openssl,RSA验证发送方具有刷数据的权限.
- *          1.0.0  基础功能, 没有安全功能.
+ *          2.0.0  增加了将数据写入到PHP文件的功能(CodeGen_Folder),配合客户端生成的读取代码,可以避免从
+ *               redis中获取数据, 而是直接从代码中获取数据, 在有代码缓存的情况下,
+ *               相当于直接使用内存中的数据, 节省了与redis的网络通讯时间(平均单次数据获取>1ms),
+ *               如果一段代码中使用到的配置数据比较多, 那么节省的时间消耗相当明显. -gwang 2020.11.27
+ *          1.0.1  通过openssl,RSA验证发送方具有刷数据的权限. -gwang 2017
+ *          1.0.0  基础功能, 没有安全功能. -gwang 2017
  * @author gwang email:wanggangzero@qq.com
  * @copyright © 2015-12-1, SJZ LoyalSoft Corporation & gwang. All rights reserved.
  */
@@ -25,6 +28,14 @@ define("CLOGUTIL_DEBUG", true);
  */
 class kvflush {
 
+    /**
+     * RSA 密钥路径
+     */
+    const keyPath = ROOTDIR . "/util/key";
+
+    /**
+     * 刷入数据
+     */
     public static function flush() {
         InitZoneId();                                                           # 初始化分区信息 Ps. $_REQUEST["zoneid"]
         $params = HttpUtil::getQueryParas();
@@ -32,47 +43,36 @@ class kvflush {
         $val = CommUtil::zb64decode(urldecode($params["val"]));
         $user = urldecode($params["user"]);
         $type = urldecode($params['type']);
-        $keypath = ROOTDIR . "/util/key";
-        $myrsa = new MyRsa($keypath);
         $sign = urldecode($params['sign']);
-
+        $myrsa = new MyRsa(self::keyPath);
         if (!$myrsa->verify_arr($params, $sign)) {                              # 验证下签名
-            echo "签名验证失败!";
-        } else {
-//            CLog::info($key . " " . $val, "刷数据");
-            switch ($type) {
-                case 'hash':
-                    $val = json_decode($val);                                   # 需要还原为Obj才能解开
-                    $ret = self::FlushToMem_hmSet($key, $val);
-                    self::FlushToFile_hash($key, $val);
-                    break;
-                case 'normal':
-                    $ret = self::FlushToMem_set($key, $val);
-                    self::FlushToFile_str($key, $val);
-                    break;
-                default :
-                    $ret = self::FlushToMem_set($key, $val);
-                    break;
-            }
-            if ($ret) {
-                echo "success";
-                self::log($user, $key);                                         # 记录日志
-            } else {
-                echo "[$key] flush to mem failed!";
-            }
+            exit("签名验证失败!");
         }
         unset($myrsa);
+        switch ($type) {
+            case 'hash':
+                $val = json_decode($val);                                       # 需要还原为Obj才能解开
+                $ret = self::FlushToMem_hmSet($key, $val);
+                self::FlushToFile_hash($key, $val);
+                break;
+            case 'normal':
+                $ret = self::FlushToMem_set($key, $val);
+                self::FlushToFile_str($key, $val);
+                break;
+            default :
+                $ret = self::FlushToMem_set($key, $val);
+                self::FlushToFile_str($key, $val);
+                break;
+        }
+        echo($ret ? "success" : "[$key] flush to mem failed!");
+        self::log($user, $key);                                                 # 记录日志
     }
 
-//put your code here
-
     static function log($user, $modelname) {
         $who = $user . '_' . HttpUtil::clientIP();
         $key = "log-flush";
-        CLog::warn($who . "flushing  [$modelname]", __CLASS__);                 # 写文件
-        $mem = gMem();
-        $ret = $mem->hset($key, $who, TimeUtil::tsYmdHis());                    # 写入mem
-//        $mem->close();
+        CLog::warn($who . "flushing  [$modelname]", __CLASS__);                 # 写文件 
+        $ret = gMem()->hset($key, $who, TimeUtil::tsYmdHis());                  # 写入mem 
         return $ret;
     }
 
@@ -85,8 +85,7 @@ class kvflush {
     public static function FlushToMem_set($key, $value) {
         $mem = gMem();
         $mem->delete($key);
-        $ret = $mem->set($key, $value);                                         # 写入mem
-//        $mem->close();
+        $ret = $mem->set($key, $value);                                         # 写入mem 
         return $ret;
     }
 
@@ -97,7 +96,6 @@ class kvflush {
      * @return type
      */
     public static function FlushToMem_hmSet($key, $assoc_array) {
-        $mem = gMem();
         if (!is_array($assoc_array)) {
             if (is_object($assoc_array)) {
                 $assoc_arr = array();
@@ -110,14 +108,20 @@ class kvflush {
             }
         }
         $ret = TRUE;
+        $mem = gMem();
         if (count($assoc_arr) > 0) {
             $mem->delete($key);
             $ret = $mem->hmset($key, $assoc_array);                             # 写入
         }
-//        $mem->close();
         return $ret;
     }
 
+// <editor-fold defaultstate="collapsed" desc=" 私有方法 ">
+
+    /**
+     * 获取输出路径
+     * @return type
+     */
     private static function getFolder() {
         if (defined('CodeGen_Folder')) {
             if (!dir(CodeGen_Folder)) {
@@ -131,6 +135,11 @@ class kvflush {
         return ROOTDIR . '/configs/data/';
     }
 
+    /**
+     * 输出到文件
+     * @param type $key
+     * @param type $value
+     */
     private static function writePHPFile($key, $value) {
         if (defined('CodeGen_Enabled') && CodeGen_Enabled) {                    # (部署环境)是否允许代码生成
             $file = fopen(self::getFolder() . $key . ".php", 'w');
@@ -140,6 +149,11 @@ class kvflush {
         }
     }
 
+    /**
+     * 向文件中输出一个字符串
+     * @param type $key
+     * @param type $value
+     */
     private static function FlushToFile_str($key, $value) {
         if ($key == "gamecfg-client") {
             self::writePHPFile($key, $value);
@@ -148,13 +162,17 @@ class kvflush {
         }
     }
 
+    /**
+     * 向文件中输入一个hash对象
+     * @param type $key
+     * @param type $assoc_array
+     */
     private static function FlushToFile_hash($key, $assoc_array) {
         self::writePHPFile($key, $assoc_array);
     }
 
+// </editor-fold>
 }
 
-//exit("success");
-
 HttpUtil::PostOnly();
 kvflush::flush();                                                               # do it