【问题标题】:Google App Engine Servlet DesignGoogle App Engine Servlet 设计
【发布时间】:2011-08-22 20:38:46
【问题描述】:

我在 GAE 上构建了一个服务器,它通过 HTTP POST 处理 6 种不同类型的请求,所有这些请求都涉及从数据存储中创建、更新或删除对象。最好的设计是什么?我会告诉你我目前的设计并表达一些其他的。

  1. 我当前的设计将所有请求发送到同一个 servlet,并使用“action”参数作为 POST 的一部分来区分和处理不同的请求。此处包含服务器应运行的代码。

例如

  public void doPost(HttpServletRequest request, HttpServletResponse response) {
        if (request.getParameter("action").equals("action_1")) {..code..}
        if (request.getParameter("action").equals("action_2")) {..code..}
        .
        .
        .
        if (request.getParameter("action").equals("action_n")) {..code..}
  }

2._与上面类似,但不是这里的代码,这个 servlet 只是充当一个集中的 servlet,并为该操作调用一个专用的 servlet。

3._每个操作只有一个专用的 servlet。

上述设计的优缺点是什么?在 GAE 上设置服务器的首选方式是什么?访问数据存储对我的设计有影响吗?

【问题讨论】:

标签: google-app-engine servlets


【解决方案1】:

太多的 servlet 会导致 GAE 环境中的类加载时间变慢(冷启动),但太少会导致请求争用,由于高延迟导致性能不佳。所以需要权衡取舍。

应考虑的解决方法是启用“始终开启”和“预热请求”功能,并使您的 servlet 多线程安全。

【讨论】:

    【解决方案2】:

    因为它们都做不同的事情,所以使用不同的 servlet。将它们组合成一个 servlet 是没有意义的:它会使您的代码和 URL 映射更加混乱。

    【讨论】:

    • 我不确定。您可以使用单个 servlet 作为控制器/调度程序,将逻辑移动到 pojos 映射,其中每个 pojo 对应于特定操作(添加、编辑、创建..)
    • @systempuntoout 那么你只是重新发明了 servlet 映射提供的功能,并没有真正的收获。
    • 你可能是对的;很长很长一段时间我不摆弄J2EE。我记得我说过的一种方法(struts v1?),但我可能在谈论史前史:P。
    【解决方案3】:
    I have built a server on GAE that handles 6 different types requests over 
    HTTP POST, all of which involve either creating, updating, or deleting objects 
    from the datastore. What is the best design for this? 
    

    这听起来像是网络服务的工作。我最喜欢的是 REST(尽管 REST 操作通常映射到 URL 而不是参数)。看看Resteasy docs

    【讨论】:

      【解决方案4】:

      我也有类似的情况。我从您的选项 1 开始,效果很好。唯一的问题是它需要大量的参数解析,将字符串转换为整数等等,以及手动将命令名称映射到方法。选项 2 和 3 同样费力,但更糟糕的是,您必须创建一堆辅助方法。如果我必须重新做一遍,我会使用一个为我完成所有工作的库,比如这个(我实际上正在考虑转换为这个):http://code.google.com/p/json-rpc/。瞧,没有参数解析或帮助类的手动创建!这个碰巧实现了一个 json rpc 客户端-服务器接口,如果你正在做一个 ajax “厚客户端”,这很好。如果您在服务器端生成大部分 HTML,您可能需要其他解决方案。

      【讨论】:

        猜你喜欢
        • 2015-03-05
        • 2014-12-11
        • 1970-01-01
        • 1970-01-01
        • 2014-12-01
        • 2012-01-30
        • 1970-01-01
        • 1970-01-01
        • 2011-04-20
        相关资源
        最近更新 更多