{
  "Sers": {
    /* 通讯层配置 */
    "CL": {
      /* one conn is one channel.can be multiable */
      "Client": [
        {
          // Socket.Iocp
          /* (x.1) type - Iocp */
          /* the class of builder in assemblyFile  */
          "className": "Sers.CL.Socket.Iocp.OrganizeClientBuilder",

          /* 通信模式（默认值：Simple）。可为 Simple、Timer、SpinWait  */
          //"mode": "Timer",

          /* (x.2) conn config */
          /* 服务端 host地址。例如： "127.0.0.1"、"sers.cloud" */
          "host": "127.0.0.1",
          /* 服务端 监听端口号。例如： 4501 */
          "port": 4501,


          /* 请求超时时间（单位ms，默认300000） */
          "requestTimeoutMs": 300000,

          /* 后台处理消息的线程个数（单位个，默认2） */
          "workThreadCount": 2,


          //HeartBeat
          /* 心跳检测时间间隔（单位ms，默认10000,若指定为0则不进行心跳检测） */
          "heartBeatIntervalMs": 10000,
          /* 心跳检测超时时间（单位ms，默认30000） */
          "heartBeatTimeoutMs": 30000,
          /* 心跳检测失败重试次数（单位次，默认10） */
          "heartBeatRetryCount": 10,

          /* 连接秘钥，用以验证连接安全性。服务端和客户端必须一致 */
          "secretKey": "SersCL"
        }
      ]
    },


    // RpcData序列化模式。可不指定。默认为Text。
    // 可为 Newtonsoft、Text、BytePointor。
    // 效率依次递增。BytePointor 序列化为二进制数据而不是json字符串。
    "RpcDataSerializeMode": "Text",


    /* ServiceStation配置,可不指定 */
    "ServiceStation": {

      /* serviceStation站点信息 */
      "serviceStationInfo": {
        "serviceStationName": "Gover"
      }
    },



    /* 网关配置 */
    "Gateway": {

      /* Rpc配置，可不指定 */
      "Rpc": {
        /* 网关转发的请求中的rpc 信息中的 CallerSource。（暗指调用来源，默认"OutSide"）  */
        "CallerSource": "Internal"
      },


      "WebHost": {

        /* url,可多个 */
        "urls": [ "http://*:4581" ],

        /* 是否允许跨域访问，默认true */
        "allowAnyOrigin": true,

        /* 把请求的ip地址、端口号复制到请求头中的前缀。若不指定则不复制。 */
        "prefixOfCopyIpToHeader": "Sers-Gateway-",

        /* http回应中的默认Content-Type。若不指定则默认为 "application/json; charset="+Serialization.Instance.charset  */
        "//ResponseDefaultContentType": "application/json; charset=UTF-8",


        /* 映射静态文件。若不指定则不映射静态文件 */
        "staticFiles": {

          /* 请求路径（可不指定）。demo："/file/static"。The relative request path that maps to static resources */
          //"requestPath": "/file",

          /* 静态文件路径。可为相对路径或绝对路径。若为空或空字符串则为默认路径（wwwroot）。demo:"wwwroot/demo" */
          //"rootPath": "wwwroot",

          /* 默认页面（可不指定）。An ordered list of file names to select by default. List length and ordering  may affect performance */
          "defaultFileNames": [ "index.html" ],

          /* 是否可浏览目录(default false)。Enables directory browsing */
          //"useDirectoryBrowser": false,

          /* 静态文件类型映射配置的文件路径。可为相对路径或绝对路径。例如"contentTypeMap.json"。若不指定（或指定的文件不存在）则不指定文件类型映射配置 */
          "contentTypeMapFile": "contentTypeMap.json",

          /* 回应静态文件时额外添加的http回应头。可不指定。 */
          "responseHeaders": {

            //设置浏览器静态文件缓存3600秒
            "Cache-Control": "public,max-age=3600"
          }
        }

      },


      /* 调用api前的事件，可不指定。 */
      "//BeforeCallApi": [
        {
          /* 在此Assembly中加载类 */
          //"assemblyFile": "Sers.Core.dll",
          /* 动态加载的类名，必须继承接口 Sers.Core.Module.Api.ApiEvent.BeforeCallApi.IBeforeCallApi */
          "className": "Bearer",
          //Bearer: 在调用接口前，会获取 rpcData.http.headers.Authorization(格式为 "Bearer xxxxxx")，并作为参数调用接口api_verifyAt，把返回数据放到 rpcData.user.userInfo

          /* 验证at接口的地址 */
          "api_verifyAt": "/AuthCenter/account/verifyAt",
          /* 验证at接口的httpMethod。(如 GET POST 可不指定) */
          "api_httpMethod": "POST"
        },

        {
          //AccountInCookie 在调用接口前，会获取 rpcData.http.headers.Cookie(格式为 "user=xxx;c=7")中的user，在账号列表中比对userToken，回写 CallerSource(rpcData.caller.source) 和 userInfo(rpcData.user.userInfo)
          "className": "AccountInCookie",
          "account": [
            {
              "userToken": "admin_123456",
              //"CallerSource": "Internal",
              "userInfo": {
                "name": "超级管理员",
                "入口": "Gover网关"
              }
            }
          ]
        }
      ],

      /* 服务限流配置，可不指定 */
      "//rateLimit": [
        {
          /* 服务限流key，标识一个限流服务，必须唯一 */
          "rateLimitKey": "rate",

          /* 固定时间窗口限流。在单位时间（msInterval）内限制最大请求数量为reqLimit。超出数量的请求将被拒绝 */
          "rateLimitType": "FixedWindow",
          /* 单位时间内最大请求数量（个）*/
          "reqLimit": 100000,
          /* 单位时间长度（单位:ms）*/
          "msInterval": 1000
        }

      ]

    }



  },



  /* Vit工具配置，可不指定 */
  "Vit": {

    /* 日志配置,可不指定 */
    "Logger": {
      /* print the log to Log/*.txt default:true  */
      "PrintToTxt": true,
      /* print the log to console. default:false  */
      "PrintToConsole": true
    },

    /* 队列模式,可不指定。可为 BlockingCollection(默认)、 ConsumerCache_BlockingCollection(高性能) */
    "ConsumerMode": "BlockingCollection",


    /* 序列化配置，可不指定 */
    "Serialization": {
      /* 序列化字符编码。可不指定，默认 UTF8。只可为 UTF7,UTF8,UTF32,ASCII,Unicode。 */
      "Encoding": "UTF8",

      /* 时间序列化格式。可不指定，默认 "yyyy-MM-dd HH:mm:ss" */
      "DateTimeFormat": "yyyy-MM-dd HH:mm:ss"
    },


    "//Kestrel": {
      /* (int64) the maximum allowed size of any request body in bytes.  When set to null, the maximum request body size is unlimited. */
      "MaxRequestBodySize": 2000000000,

      /* (int32) A limit on the length of individual form values. Forms containing values that exceed this limit will throw an System.IO.InvalidDataException when parsed. */
      "ValueLengthLimit": 2000000000,

      /* (int64) A limit for the length of each multipart body. Forms sections that exceed this limit will throw an System.IO.InvalidDataException when parsed. */
      "MultipartBodyLengthLimit": 2000000000
    }

  }




}
