即时尝试编写一个简单的Web服务器在Java中。java服务器来处理多个TCP连接
现在我只有一个简单的程序,但id喜欢扩展它,以便它可以通过建立多个tcp连接服务于多个浏览器。
我一直在阅读关于线程。我的理解是,你可以创建一个新的线程,并且这个线程将继续,就像其他程序完全一样。所以通过一个新的线程,它可以像2个可以服务2个浏览器的Web服务器,或者可以服务于X个Web浏览器的X个Web服务器。
即时通过在java中创建新线程并为每个新线程建立连接丢失了一点点。
我的想法是,我将有一个这样的循环,其获得新的连接,并传递到一个新的线程每一个新的连接
// make new ServerSocket
while (true) {
Socket newConn = serverSocket.accept();
// make new thread, and pass in newConn
}
能有人给我如何推进一些指导? (此外,如果香港专业教育学院的地方犯了一个错误,请你指出来进出口新的线程编程所以它完全有可能的香港专业教育学院没有正确地理解它。)
抢
编辑:
ķ感谢所有。
我去写了一些东西,这个java教程帮了很大忙。
香港专业教育学院有一个新的问题,现在
我在其中包含10秒倒计时(使用了Thread.sleep(1000)),每当服务器收到请求新线程添加一个循环,我的run()方法一个图像,所以我可以看到哪些线程正在运行。 (index.html有4个图像)
所以我要求index.html页面和我的服务器工作正常。然后我打开了大约十几个新标签。我的期望是,对index.html页面的请求将是即时的,但要将图像发送到浏览器需要10秒(因为我放在那里的延迟),此时服务器将收到请求为下一个index.html页面,等等。总的来说,我认为一打index.html页面会立即提供,而4 * 12 = 36图片需要10秒才能在所有选项卡上提供。
实际发生的事情是,需要10秒钟才能获得前4张图像,接下来4张图像需要10秒钟等等,而不是服务多个网页,我的服务器只是排队处理请求并处理一页一次。
我认为我的程序有问题。但我觉得我可能无法正确理解浏览器如何与服务器交互。我认为浏览器在html页面被解析时请求新的对象。所以我的服务器应该会收到几十个请求,如果我打开一打网页。我试图在FF中打开几个选项卡,然后在FF中打开几个窗口,但这并没有帮助。然而,当我打开IE浏览器,FF和Chrome浏览器,并且我在不同的时间(间隔大约2秒)要求index.html时,它看起来像每个浏览器同时接收页面,换句话说,在一个点,有12个不同的图像正在服务,4对每个浏览器
所以我想即时通讯寻找一点确认,这是预期的行为?如果是这样,为什么我只能看到这种行为,当我打开3个不同的浏览器,而不是当我打开多个选项卡?
(对于那些问,我计划确定采取网络课程明年,但我尝试做一些基本的东西了。所以一半的自我学习,一半的H/W)
这是作业/自学还是商业用途?如果是后者,我强烈建议使用[第三方HTTP服务器API](http://java-source.net/open-source/web-servers)而不是重新创建一个。 Jetty开始很好,它有JSP/Servlet支持。 – BalusC 2010-09-12 13:56:10