用 Java 或其他编程语言编写像 Tomcat 这样的服务器有多难?
我一直很享受使用 UDP 和 TCP 套接字将它们塑造成简单的客户端和服务器以在我的计算机周围传递数据,我想知道从头开始编写服务器会有多难?
我知道至少有一个使用 JVM 用 Java 编写的操作系统,在通常用 C 或 ASM 编写的部分。
用 Java 或其他编程语言编写像 Tomcat 这样的服务器有多难?
我一直很享受使用 UDP 和 TCP 套接字将它们塑造成简单的客户端和服务器以在我的计算机周围传递数据,我想知道从头开始编写服务器会有多难?
我知道至少有一个使用 JVM 用 Java 编写的操作系统,在通常用 C 或 ASM 编写的部分。
Java 在编写客户端/服务器程序时非常有能力。虽然联网并不容易,但有许多工具包使编写此类程序变得更加困难,并且具有更多的先决知识。
至于“Tomcat”类型的服务器,您还需要学习很多关于类加载的知识,以防止标识为“应用程序”的 java 类的“树”交叉通信。类加载需要更多时间才能正确,主要是因为编写一组体面的测试以真正确保类在正确的位置并且确实存在安全性是一项工作。
是不是有点工作?是的。但究竟有多少工作在很大程度上取决于细节。一个简单的服务器套接字和接受连接的代码可以由一个有经验的程序员在一天内(或至少在一周内)编写出来。实现协议(预期和发送的位)将花费更长的时间,具体取决于协议支持多少“功能”。这就是为什么所有“示例”客户端/服务器 Java 程序基本上都是“回显”服务器、时间服务器或其他一些非常琐碎的协议。
如果您想要一个复杂的线程模型来确保服务器在额外的内核上扩展,或者即使在处理需要相对较长时间的其他请求时也能快速处理请求,那么请继续增加更多时间(因为您放弃简单的线程模型以获得更复杂的线程模型) .
到现在为止,您已经决定需要配置一些东西,而您决定如何配置它们将决定您需要在配置子系统上投入多少时间。
实际成本;但是,不是在应用程序的编写中,而是在测试和错误修复中。对于在正常情况下编写的每一行代码,许多未经考虑的情况最终会减慢速度。为了预先支付一些已知但通常是计划外的额外时间,请使用测试驱动开发来避免在您想说“我完成了”时让自己支付巨额测试债务。
我认为这对学生来说是一个很棒的项目,因为它可以教你很多关于编程的知识。特别是,它将帮助您了解在您尝试进行项目时遇到的所有小(而不是小)问题。当我在大学时,我想从头开始编写自己的简单 SMTP 服务器。我必须学习协议、网络编程、线程和大量其他我在开始时没有考虑过的细节。我认为它非常有用(而且很耗时),而且当我完成时,我觉得我实际上已经完成了一些事情。我还了解了为什么人们使用现有的库并倾向于专注于构建他人的工作而不是从头开始,但直到最后我才知道这一点。
我的建议是给自己一个具体且看似很小的目标,并确保完成它。最重要的教训是成为那种完成他们开始的事情的人。很多人都有很棒的想法,但执行(和完成)即使是很小的想法也始终是最重要的。
我不会选择像 Tomcat 这样的 Servlet 容器,因为 Servlet 规范是一头野兽。我会找到您感兴趣的东西,限制范围并开始工作。我的朋友想要一个邮件列表,所以我从那里开始。也许您对 HTTP 感兴趣,或者您想要一种让您的手机在计算机上播放 MP3 的方法。如果您自己解决问题(即使已经存在“真正的”解决方案),这有助于保持动力。
祝你好运!
你能行的!