我是否需要服务器端Java编程的servlet?

Már*_*iva 13 java tomcat servlets

我需要编写一个小型服务器来处理来自Android应用程序的请求.(用户向服务器发送一个号码,服务器对从每个用户收到的号码进行一些数学计算 - 平均值,比方说 - 然后返回它).

我刚读过Oracle的这个简单介绍(http://docs.oracle.com/javase/tutorial/networking/sockets/clientServer.html).

它解释了如何让服务器监听特定的门.普通的java,不需要特殊的应用程序(比如Tomcat).

我知道人们通常使用'servlets'(使用Tomcat)来完成这种事情.这是为什么?有什么好处?我不能像这个简单教程中描述的样本服务器一样编程,并让它始终在计算机上运行吗?

我只想更好地了解整体情况.=)

Bor*_*der 15

使用套接字非常简单.首先.

您创建了您的服务器类,您将它绑定到一个端口,然后离开.

您将在评论中介绍的第一个障碍是多线程.但是一个简单的生产者/消费者模式将立即为您解决这个问题.

你将遇到的下一个问题是协议.

  • 谁先说话?

  • 你是如何回应的?

  • 你如何处理无效的请求?

  • 如果流在请求期间崩溃会发生什么?

  • 您是为每个请求打开一个新套接字还是客户端保持套接字并写入多个请求?

  • 也许你想要某种非阻塞的IO?

这就是HTTP的用武之地,它是一种通过TCP/IP进行通信的协议(实际上是在任何地方,你可以使用一些纸和一辆自行车).它定义了所有上述问题(以及更多)的答案.

因此,您运行一个Web服务器(tomcat,glassfish),它处理原始套接字并发送正确的信息.

servlet是一种抽象,当Tomcat有连接并且它已协商压缩,加密等时,它会将请求传递给servlet.

servlet不必担心原始套接字,它会读取请求并写入响应.

值得指出的是,HTTP并不是唯一的协议,只是恰好用于网络浏览的协议.所以Web服务器使用的那个.


ran*_*ath 10

你不需要servlet.

Servlet是有用的,因为它们为您管理套接字处理,但缺点是您需要一个容器(如Tomcat)来运行您的servlet.你可能想看看Netty,它真的是为了你正在谈论的那种工作而建立的.

  • 没有理由不使用端口80或443.使用Netty,您可以制作自己的协议或使用内置的协议,如HTTP. (2认同)