2011-12-07 44 views
1

我正在尝试使网络聊天与其他语言进行集成。 我愿意创建我自己的网络服务器在Java ..只知道回应一个特定的请求。聊天java web服务器,http部分响应

我有一个监听端口80应答与

out.print("HTTP/1.1 200 OK\r\n"); 
out.print("Content-Type: text/plain\r\n\r\n"); 

out.println("We have a text now"); 

out.print("\r\n"); 
out.print("\r\n"); 
out.print("0"); 
out.print("\r\n"); 
out.print("\r\n"); 

我的问题是...有没有办法使用部分反应,以保持浏览器的插口开放套接字?

我想只有当它们存在发送消息。在这种情况下,消息将几乎立即派出..

PS:我不是在谈论网络插座,因为不是所有的程序都支持Web的插座。 ..只有浏览器做...(程序不支持网络套接字:Internet Explorer)

我的问题是,如果我可以使用部分响应(206)在这种情况下..以及如何保持页面“加载“并发送部分文本...... ?? ...我必须说内容长度或什么?我必须写什么头......我只知道几种状态(200,301,404等)。对于206我不知道在第一,第二,第三行写什么......如何发送响应(如xml,text,还是我可以定义内容类型?)以及如何从javascript读取它?

例如,我想这个代码写的每一秒的东西:

out.print("HTTP/1.1 200 OK\r\n"); 
out.print("Content-Type: text/plain\r\n\r\n"); 

for (int i = 0; i < 10; i++) 
{ 
    out.println("We have a text now"); 
    try 
    { 
     Thread.sleep(1000); 
    } 
    catch (InterruptedException e) 
    { 
     e.printStackTrace(); 
    } 

} 

out.print("\r\n"); 
out.print("\r\n"); 
out.print("0"); 
out.print("\r\n"); 
out.print("\r\n"); 

问候

+0

'保持浏览器的插口打开?'为什么你想要这个? – PeterMmm

+0

,因为我想发送消息时,只有当他们存在..所以..这样的消息几乎立即发送.. – Alex

+0

不明白你的问题 –

回答

1

什么像样的HTTP客户端将使用保持HTTP连接,因此,如果用户再次使得在几请求秒他们将不需要打开一个新的连接。如果你编写自己的web服务器,你必须确保实现这个,否则实现将比标准的web服务器或web容器(例如tomcat或jetty)慢。另外,由于许多语言都有很好的http库,所以你也不需要为此定制一个Web服务器。

如果你已经编写了一个servlet,可以简单地不再从http响应返回,然后在响应出来时写出响应。这将绑定服务器上的线程,但可能不会很好地扩展。

你可以试试其中一个异步http实现(例如netty或mina),然后去尝试一下,但这样做的工作量要大得多 - 尽管它的工作量要比试图推出自己的工作要少得多。

1

此代码“保持浏览器的插座开”:

out.print("Connection:keep-alive \r\n"); 

但请记住,浏览器仍然可能需要投票,以获得新的文本。

+0

这不是帮助我...我想让我写文字..我会更新我的帖子... – Alex

0

不要介意保持活着或其他标题。只需在您的Web服务中等待合理的金额,执行更改检查和睡眠()。

我在我的PHP代码中使用了10..20秒的睡眠,并且它工作正常。 (PHP的默认脚本最大执行时间为30秒,因此它不需要Apache/PHP配置)。另外,我在C/C++服务器代码中使用了4..5秒的睡眠时间,只是“因为我可以”,简单的C++ web服务器响应线程比PHP web服务器线程/进程吃的资源要少得多(不管)。

这种模式只有一个问题:当服务器端发生变化时,您不应该立即回应,因为这可能比有更多的,所以您应该等待并收集一些变化为了在一个答案中报告他们。