Google App Engine Servlet设计

时间:2011-05-10 22:06:34

标签: google-app-engine servlets

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

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

      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。

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

    上述设计的优缺点是什么?在GAE上设置服务器的首选方法是什么?访问数据存储区是否会影响我的设计?

4 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

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? 

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

答案 2 :(得分:0)

由于它们都是分开的东西,所以使用单独的servlet。将它们组合到一个servlet中是没有意义的:它会使您的代码和URL映射更加混乱。

答案 3 :(得分:0)

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

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