java - 聊天java网络服务器,http部分响应

标签 java webserver chat

我正在尝试进行网络聊天以与其他语言集成。 我愿意用 java 创建我自己的网络服务器..它只知道响应特定的请求。

我有一个正在监听端口 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");

我的问题是...有没有办法使用部分响应来保持浏览器的套接字打开?

我只想在消息存在时发送消息..在这种情况下消息几乎会立即发送..

P.S:我不是在谈论网络套接字,因为并非所有程序都支持网络套接字...只有浏览器支持...(不支持网络套接字的程序:Internet Explorer)

我的问题是在这种情况下我是否可以使用部分响应(206)..以及如何保持页面“加载”并发送部分文本...?...我必须说内容长度或者其他的东西?我必须写什么标题...我只知道几种状态(200、301、404 等)。对于 206,我不知道在第一、第二、第三行写什么。如何发送响应(作为 xml、文本,或者我可以定义内容类型吗?)以及如何从 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");

问候

最佳答案

任何像样的 http 客户端都会使用 http keep-alives,因此如果用户在几秒钟内再次发出请求,他们将不需要打开新连接。如果您编写自己的 Web 服务器,则必须确保实现这一点,否则实现速度将比标准 Web 服务器或 Web 容器(例如 tomcat 或 jetty)慢。此外,由于许多语言都有良好的 http 库,因此您也不需要为此自定义 Web 服务器实现。

如果您编写了 servlet,则可能根本不会从 http 响应中返回,然后只是在响应出现时将其写出。但这会占用服务器上的线程,并且可能无法很好地扩展。

您可以尝试其中一种异步 http 实现(例如 netty 或 mina)并尝试一下,但这需要更多的工作——尽管它仍然比尝试自己实现要少得多。

关于java - 聊天java网络服务器,http部分响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8415695/

相关文章:

java - 声明对象时动态使用参数

linux - apache linux (centos 7) 上的网页未出现在我局域网的其他计算机上

python - 拒绝订阅 Google App Engine 上具有不同域的用户

java - Java 中的多客户端聊天应用程序

mysql - 与数据库在线聊天 - 最快的方式?

java - Spring MVC 3.2.3 Tiles 2 HTTP Status 500 - Servlet appServlet 的 Servlet.init() 引发异常

java - 在 Java 中对 txt 文件进行排序的最佳方法

java - java中如何使用线程ID获取线程运行时间?

python - 部署 f-droid 服务器

multithreading - 为什么我会选择基于线程/基于进程的方法与异步 Web 服务器