代理服务器连接重置

时间:2013-11-21 21:23:34

标签: java multithreading sockets proxy

我的代理服务器是一个简单的Java套接字服务器,它侦听端口8081.但是,请求的处理方式与常规代理服务器略有不同。

例如,如果我想打开http://www.google.com,我会输入http://localhost:8081/http://www.google.com。我的服务器:8081会在http://www.google.com:80上打开一个套接字,发送从浏览器收到的相同HTTP标头,然后它会将响应从Google返回给浏览器。

但是,例如,如果浏览器期望视频/ mp4流,则存在问题。假设请求的页面为http://localhost:8081/http://www.cnn.com/today.mp4。我的服务器:8081然后将使用适当的标头连接到http://www.cnn.com/today.mp4并开始接收流。将读取流并且块(实际上不是分块的http编码,32768字节的块)将被转发到浏览器。我的服务器为每个套接字创建一个单独的线程,字节read()(来自服务器)和write(到浏览器)循环在try-catch块中,所以如果出现故障,就会关闭套接字。

一切正常,但问题发生在这里:当浏览器请求转发视频时,即视频的第5分钟(使用字节范围标题),我的服务器停止工作。 write()失败,套接字关闭。接受的下一个套接字无法写入(或可以),但浏览器请求失败(在Chrome开发者工具中查看)。

对不起文字墙,我希望你能帮助我。如果有必要,我可以发布一些代码,但它是一个基本的多线程套接字服务器,每个套接字都有一个线程。

只是为了澄清,通过转发视频我的意思是快进和/或倒带。浏览器使用bytes-range标头来执行此操作。

1 个答案:

答案 0 :(得分:0)

原来问题出在闪存视频播放器中,请求来自服务器的视频标题错误。在调整它的属性(谈论jwplayer)之后,它运行正常。