java - 保持来自自制 Java 服务器的持久连接

原文 标签 java persistent

我已经构建了一个简单的 Java 程序,它在本地用作服务器。

目前它做了一些事情,例如预览目录,如果目录包含它,则转发到 index.html,发送 Last-Modified header 并正确响应客户端的 If-Modifed-Since要求。

我现在需要做的是让我的程序接受持久连接。目前它是线程化的,因此每个连接都有自己的线程。我想将我的整个线程代码放在一个循环中,该循环一直持续到 Connection: close ,或指定的超时。

有人知道从哪里开始吗?

编辑:这是一个大学项目,必须在不使用框架的情况下完成。

我有一个 main 方法,它无限循环,每次循环它都会创建一个 Socket 对象,一个 HTTPThread然后创建对象(我自己创建的一个类) - 处理单个请求。

我想使用 Connection: keep-alive 允许多个请求在单个连接中工作请求 header 。我希望在我的 HTTPThread 中使用循环类,我只是不确定如何传递多个请求。

提前致谢 :)

最佳答案

我假设您从 Socket API 开始自己实现 HTTP 协议(protocol)代码。并且您正在实现 HTTP 规范的持久连接部分。

您可以按照您的建议将代码放入循环中,并使用 Socket.setSoTimeout 设置阻塞操作的超时,从而设置您的 HTTP 超时。你不需要做任何事情来重用你的连接流......除了不关闭它们。

我要指出,实现 Web 服务器的方法要简单得多。有许多现有的 Java Web 服务器框架和应用程序服务器,或者您可以重新利用 Apache HTTP 协议(protocol)栈。

关于java - 保持来自自制 Java 服务器的持久连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8066718/

相关文章:

haskell - 制作 PersistBackend 的自定义实例

haskell - "Type variable is ambiguous"在 Haskell Yesod 中持久化

工具栏中的Android持久搜索栏

java - eclipse android sdk 更改后不更新代码

java - 对查找偶数斐波那契数之和的运行时间感到困惑

java - Java TreeMap替代

parallel-processing - 如何为处理一组文件的并行作业设置 Kubernetes

java - 将另一个 JSTL 标记的结果分配为一个 JSTL 标记的值

java - rxjava interval() 在某个事件后重置时间

javascript - 如何在 Jquery 中读取 cookie 值并创建另一个具有相同值的 cookie