<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      老平臺已死,整理個文檔留下做紀念

      1,平臺的服務器整體架構

      wps_clip_image-29531

      2,項目結構

      wps_clip_image-32095

      3,業務結構

      wps_clip_image-3913

      4,技術實現

      wps_clip_image-14621

      5,業務舉例

      登錄頁:

      wps_clip_image-3742

      登錄:

      wps_clip_image-17

      其它的服務只是業務不同,這里省略...

      6,應用的啟動過程資源準備

      wps_clip_image-21766

      7,json的封裝

      public static void CrossDomain2(HttpServletResponse response, HttpServletRequest request, Object msg) throws IOException {

              response.setContentType("application/json");

              final String call = request.getParameter("callBack");

              final ObjectMapper mapper = new ObjectMapper();

              String resp = mapper.writeValueAsString(msg);

              if (!Strings.isNullOrEmpty(call)) {resp = call + "(" + resp + ")";}

              PrintWriter out = response.getWriter();

              out.write(resp);

              out.flush();

              out.close(); }

      8,cookie域的算法

      //構造cookie

      final long time = System.currentTimeMillis();

              String userId = String.valueOf(uid);

              String USERINFO = userId + "," + userName + "," + time;

              String u = Base64.encode(USERINFO + "," +

                      buildUserInfoSign(String.valueOf(userId), userName, String.valueOf(time)));

              u = URLEncoder.encode(u, "utf-8");

              String key = URLEncoder.encode(Base64.encode("USERINFO"), "UTF-8");

              Cookie cookie = new Cookie(key, u);

      //構造cookie加密部分

          public static String buildUserInfoSign(String id, String name, String time) {

              String userInfoSrc = id + name + time;

              String key = ConfigurationUtils.get("login.cookieKey");

              String userInfo = userInfoSrc + key;

              String md5UserInfo = MD5Utils.digestAsHex(userInfo);

              return md5UserInfo;

          }

      //解析cookie

      public static int getUserId(HttpServletRequest request) {

              int userId = 0;

              String value = getCookieValueByKey(request);

              if (!Strings.isNullOrEmpty(value)) {

                  String val[] = value.split(",");

                  userId = Integer.parseInt(val[0]);

              }

              return userId;

      }

      public static String getCookieValueByKey(HttpServletRequest request) {

              String value = "";

              Cookie[] cookies = request.getCookies();

              String name = "USERINFO";

              try {

                  name = Base64.encode(name);

                  name = URLEncoder.encode(name, "utf-8");

              } catch (Exception e) {

                  log.error("USERINFO解碼出錯!{}", e.getMessage());

              }

              if (cookies != null && cookies.length > 0) {

                  for (Cookie cookie : cookies) {

                      String nameStr = cookie.getName();

                      if (nameStr.equals(name)) {

                          value = cookie.getValue();

                          break;

                      }

                  }

              }

              if (!Strings.isNullOrEmpty(value)) {

                  try {

                      value = URLDecoder.decode(value, "UTF-8");

                      value = Base64.decode2Str(value);

                  } catch (Exception e) {

                      log.error("URL解碼出錯!{}", e.getMessage());

                  }

                  String val[] = value.split(",");

                  String sign = buildUserInfoSign(val[0], val[1], val[2]);

                  if (!Strings.isNullOrEmpty(sign) && !Strings.isNullOrEmpty(val[3]) && sign.equals(val[3])) {

                      return value;

                  } else {

                      return "";}

              }

              return "";

          }

      9,http的理解和封裝

      public class HeadlessServlet extends HttpServlet implements InjectionProxy

      里面加了一個對自定以的注解的過濾;

      protected boolean filters(final HeadlessServletRequest request, final HeadlessServletResponse response) throws ServletException, IOException {

              final Parameter parameter = this.getClass().getAnnotation(Parameter.class);

              if (null == parameter)

                  return true;// filter methods

      if (!Strings.isNullOrEmpty(parameter.method()) && !request.getMethod().equalsIgnoreCase(parameter.method())) {

                  notFound(response);

                  return false;

              }

              // filter parameters

              boolean flag = true, emptyCheck = false;

              try {

                  final Map<String, String[]> parameterMap = request.getParameterMap();

                  for (String name : parameter.value()) {

                      if (name.endsWith(":")) {

                          name = name.substring(0, name.length() - 1);

                          emptyCheck = true;

                      }

                      flag = parameterMap.containsKey(name);

                      if (emptyCheck) {

                          // must has parameter.

                          flag = flag && parameterMap.get(name) != null;

                          flag = flag && parameterMap.get(name).length > 0;

                          flag = flag && !Strings.isNullOrEmpty(parameterMap.get(name)[0]);

                      }

                      if (!flag)

                          break;

                      emptyCheck = false;

                  }

                  return flag;

              } finally {

                  if (!flag) {

                      response.sendInvalidParameters();

                  }

              }

          }

      10,db設計

      wps_clip_image-7341

      11,老平臺小結

      老平臺采用的架構很簡單,一個Guice+Servlet,簡單的把一個url映射到一個特定的Servlet,

      這里借用Guice-servlet,省去了原生的servlet配置文件復雜的嫌疑,簡單的使用Guice容器,

      把所需資源按照分類和層級一一放到容器中初始化,簡化了實例化的過程,提高了效率;業

      務也不復雜,很容易從其它的游戲平臺移植過來,業務的技術難點有兩個,一個是跟其它服

      務器的交互和通信,另外一個是緩存的使用;對于跟其它服務器的交互,主要是基于http

      請求,如果對這一部分比較熟悉,只要文檔給的比較規范,開發和調試起來還是完全沒有問

      題的;然后是緩存的問題,這里主要使用的Redis,一個key-value數據庫,通過把經常用的

      數據從db中查詢出來,放到redis里面,需要的時候從redis里面取得,這大大提升了性能,

      如果redis不穩定,可以直接從db里取得,保證了程序的健壯性;暫未進行過并發性測試,

      目前能支撐2000w用戶的使用已經算是一個還不錯的架構。

      posted @ 2014-03-10 17:36  李福春  閱讀(609)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 亚洲永久精品日本久精品| 海宁市| 国产精品一区二区AV| 阿坝县| 92国产精品午夜福利| 日本久久99成人网站| 精品无码人妻一区二区三区| 18禁黄无遮挡网站免费| 亚洲av激情久久精品人| av午夜久久蜜桃传媒软件| 久久人妻国产精品| 国产一区在线观看不卡| 日韩有码中文字幕av| 少妇宾馆粉嫩10p| 午夜精品久久久久久久久| 人妻少妇久久久久久97人妻| 亚洲午夜无码久久久久蜜臀AV | 免费看视频的网站| 免费观看添你到高潮视频| 精品久久一线二线三线区| 亚洲AVAV天堂AV在线网阿V| 日韩中文字幕有码av| 亚洲国产精品美日韩久久| 果冻传媒董小宛视频| 精品综合久久久久久97| 最新的精品亚洲一区二区| 中文www天堂| 日本一本无道码日韩精品| 日本高清中文字幕免费一区二区| 人人妻人人狠人人爽天天综合网| 狠狠久久五月综合色和啪| 99九九视频高清在线| 极品无码国模国产在线观看| 国产精品午夜福利91| 国内自拍视频一区二区三区| 欧美日韩在线第一页免费观看| 欧美精品国产综合久久| 久久综合精品成人一本| 国产精品美女黑丝流水| 中文字幕人妻无码一区二区三区| 精品国产成人午夜福利|