我在GAE上构建了一个服务器,通过HTTP POST处理6种不同类型的请求,所有这些都涉及从数据存储区创建,更新或删除对象。 什么是最好的设计? 我会告诉你我目前的设计,并表达其他几个。
例如
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上设置服务器的首选方法是什么? 访问数据存储区是否会影响我的设计?
我处于类似的情况。 我开始使用你的选项1,它工作正常。 唯一的问题是它需要大量的参数解析,将字符串转换为整数和诸如此类,以及将命令名称手动映射到方法。 选项2和3同样费力,但更糟糕的是因为你必须创建一堆辅助方法。 如果我不得不重新做一遍,我会使用一个可以为我工作的库,就像这个(我实际上考虑转换到这个): http : //code.google.com/p/json- rpc / 。 Voila,没有参数解析或手动创建帮助类! 这个碰巧实现了一个json rpc客户端 - 服务器接口,如果你正在做一个ajax“胖客户端”,这很好。 如果要在服务器端生成大部分HTML,则可能需要其他解决方案。
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的文档 。
由于它们都是分开的东西,所以使用单独的servlet。 将它们组合到一个servlet中是没有意义的:它会使您的代码和URL映射更加混乱。
太多的servlet可能导致GAE环境中的类加载时间较慢(冷启动),但是太少可能导致请求争用,导致由于高延迟导致性能低下。 所以需要权衡。
应该考虑的解决方法是启用“始终开启”和“预热请求”功能,并使您的servlet多线程安全。