2013-11-21 115 views
0

我的代理服务器是一个简单的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开发人员工具中查看时)。

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

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

+0

这是一个超时的事情?你能否告诉'write()'在特定的时间之后是否正在死亡? – admdrew

+0

浏览器请求转发视频后,它几乎立即死亡。 – liliumdev

+0

我想在接受新套接字后添加一个'sleep()'几秒钟,但是这也不起作用。 – liliumdev

回答

0

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