用Java编写类似Tomcat的服务器

用Java编写类似Tomcat的服务器,java,Java,用Java或其他编程语言编写像Tomcat这样的服务器有多难 我一直很喜欢使用UDP和TCP套接字将它们塑造成简单的客户端和服务器,以便在我的计算机上传递数据,我想知道从头开始编写服务器有多难 我知道至少有一个操作系统是用Java编写的,在通常用C或ASM编写的部分使用JVM。虽然联网并不容易,但有许多工具包使得编写这样的程序变得更加困难,需要更多的必备知识 对于“Tomcat”类型的服务器,您还需要学习很多关于类加载的知识,以防止被标识为“应用程序”的java类的“树”进行交叉通信。类加载需要

用Java或其他编程语言编写像Tomcat这样的服务器有多难

我一直很喜欢使用UDP和TCP套接字将它们塑造成简单的客户端和服务器,以便在我的计算机上传递数据,我想知道从头开始编写服务器有多难

我知道至少有一个操作系统是用Java编写的,在通常用C或ASM编写的部分使用JVM。虽然联网并不容易,但有许多工具包使得编写这样的程序变得更加困难,需要更多的必备知识

对于“Tomcat”类型的服务器,您还需要学习很多关于类加载的知识,以防止被标识为“应用程序”的java类的“树”进行交叉通信。类加载需要更多的时间才能正确完成,主要是因为编写一组像样的测试来真正确保类位于正确的位置,并且安全性确实存在,这是一项工作

这是一点工作吗?对但具体工作量很大程度上取决于细节。一个简单的服务器套接字和接受连接的代码可以由一个有经验的程序员在一天(或者至少不到一周)内编写。实现协议(预期和发送的位)需要更长的时间,这取决于协议支持的“功能”数量。这就是为什么所有“示例”客户机/服务器Java程序基本上都是“echo”服务器、时间服务器或其他一些非常琐碎的协议

如果您想要一个复杂的线程模型来确保服务器跨额外的内核扩展,或者即使在处理其他需要相对较长时间的请求时也能快速处理请求,那么请继续增加更多的时间(因为对于更复杂的线程模型,您放弃了简单的线程模型)

到现在为止,您已经决定了一些事情需要进行配置,而您决定如何配置它们将决定您需要在配置子系统上投入多少时间


实际成本;但是,不是在编写应用程序,而是在测试和修复bug。对于在正常情况下工作的每一行代码,许多未经考虑的情况最终都会减慢速度。为了提前支付一些已知的、但通常是无计划的额外时间,使用测试驱动开发可以避免在你想说“我完成了”时支付大量的测试债务。我认为这对学生来说是一个伟大的项目,因为它可以教你很多编程知识。特别是,它将帮助您了解在您尝试进行项目时遇到的所有小问题(而不是小问题)。当我在大学时,我想从头开始编写自己的简单SMTP服务器。我必须学习协议、网络编程、线程和大量其他细节,这些都是我开始时没有想到的。我认为这很有用(也很耗时),我觉得当我完成的时候,我真的完成了一些事情。我还了解了为什么人们使用现有的图书馆,并倾向于专注于构建他人的工作,而不是从头开始,但我直到最后才了解到这一点

我的建议是给自己一个明确的、看起来很小的目标,并确保完成它。最重要的一课是成为一个能完成自己开始的事情的人。很多人都有伟大的想法,但执行(和完成)哪怕是微小的想法始终是最重要的

我不会选择像Tomcat这样的Servlet容器,因为Servlet规范是一个野兽。我会找到你感兴趣的东西,限制范围,然后开始工作。我的朋友想要一个邮件列表,所以我从那里开始。也许你对HTTP感兴趣,或者你想让手机在电脑上播放MP3。如果你正在为自己解决一个问题(即使“真正的”解决方案已经存在),保持动力会有帮助

祝你好运


你能行

你说的是操作系统或某种软件,还是软件中间件?您希望服务器做什么?转到:,查看源代码。然后你可以自己估计。像apache、iPlanet、tomcat等服务器……但是当我想到像BSD这样的服务器时,我无法找到或查看源代码,“原始”源代码我知道这听起来很糟糕,但我不得不问,但是。。如果我只想使用Java库并自己编写所有源代码,那该怎么办;就像从头开始制造汽车一样?甚至汽车制造商也使用半加工的原材料。他们不会抓起铲子开始挖掘矿石,提炼成金属,铸造成汽车零件。如果您想从只使用核心Java库开始,它已经能够在不到一百行代码中实现客户机/服务器程序。我是计算机科学专业的学生,辅修数学和网络。我完全理解你的出身,因为我主修计算机科学,辅修数学。我的建议是从这里开始,因为即使您对网络的知识比他们想象的要多,您也永远不会因为忽略在Java环境中应用的基础知识而学习Java网络。一旦你掌握了基本知识,你的网络理论中的点点滴滴将有助于设计一个明确的协议,但你仍然会在过渡中学到一些东西。当然你可以。我不能保证回复,甚至不能很快回复。ebuck70(at)yahoo(dot)com这项任务不是简单的手机应用市场。这纯粹是为了科学目的,开发更尖端的计算机技术,这将有助于通过计算和网络增加信息理论;学习互联网上的内部工作,以及等待程序员发现的可能性