【发布时间】:2015-08-22 06:04:39
【问题描述】:
我正在为一个大学项目用 Java 编写一个相当简单的 HTTP 代理(因此我只能使用内置的 JDK 功能)。
在编写软件时,我对持久连接感到很困惑。 代理应该能够解析/操作所有 http 消息,所以我需要收集所有内容,不能只是转发它。
原则上我是这样做的: 一个线程正在侦听来自浏览器的连接。当连接出现时,我启动一个线程。它从流中读取(客户端-> 代理)并将其转发到(代理-> 服务器)。
现在我听说浏览器可能对不同主机使用相同的代理连接,因此可能有 1 个线程用于客户端->代理通信和多个子线程转发到不同的主机。
我的代理在某些情况下已经可以工作了。但是我有线程没有被杀死的问题。
我什么时候必须关闭不同连接的 Java 套接字流?
现在我为不同的流做:
- 客户端->代理:什么都不做
- proxy->1 server: 当proxy从客户端读取-1时关闭
- 1 个服务器 -> 代理:无
- 代理->客户端:当所有(服务器->客户端)线程读取-1时关闭。 (所以当每台服务器都关闭了与代理的连接时)。
但这并没有停止正确,而且我很难调试。
这原则上正确吗?
还要补充一点:我是否必须处理 proxy-connection:keep-alive 和 Connection:close 标头,或者我可以只转发它们吗?因为目前我没有做任何与他们相关的事情,但我感觉这是主要问题,我只是想确定一下。
【问题讨论】: