Javascript Opera使长轮询套接字保持打开状态

Javascript Opera使长轮询套接字保持打开状态,javascript,sockets,opera,long-polling,file-descriptor,Javascript,Sockets,Opera,Long Polling,File Descriptor,我们有一个长期投票和歌剧的问题。我本人是一名c语言程序员,并根据我们的需要开发了一个定制的http守护进程。在这种情况下,我们需要一个能够处理大量连接的长轮询服务器 问题是,opera在点击网站上的某个链接后,仍然会以某种方式打开这些长时间的投票,当然还会打开新的投票。我们使用基本的长轮询技术,尝试在iframe中包含javascript。这在其他浏览器上运行良好,但即使我强制关闭服务器端的先前轮询,opera也会重新打开它们。这不是很好,因为在高流量的站点上,只有少数opera用户可以通过浏览

我们有一个长期投票和歌剧的问题。我本人是一名c语言程序员,并根据我们的需要开发了一个定制的http守护进程。在这种情况下,我们需要一个能够处理大量连接的长轮询服务器

问题是,opera在点击网站上的某个链接后,仍然会以某种方式打开这些长时间的投票,当然还会打开新的投票。我们使用基本的长轮询技术,尝试在iframe中包含javascript。这在其他浏览器上运行良好,但即使我强制关闭服务器端的先前轮询,opera也会重新打开它们。这不是很好,因为在高流量的站点上,只有少数opera用户可以通过浏览该站点使守护进程快速用完免费的文件描述符(因为每次单击该站点都会打开一个新的长轮询,而旧的轮询不会关闭)。页面刷新不会导致相同的结果,它做了正确的事情:关闭长轮询并打开一个新轮询。关闭opera后,所有文件描述符都将关闭,一切正常

那么,我应该在http守护进程中为opera添加一些特定的头,还是我们的javascript中有什么错误

编辑:使用以下版本进行测试:Opera/9.80(X11;Linux x86_64;U;en)Presto/2.6.30 version/10.63

我们使用基本的长轮询技术,尝试在iframe中包含javascript

因此,所讨论的套接字正在向
iframe
提供内容

如果你离开页面点击,Opera显然应该关闭这些连接。但您可以在离开页面时尝试显式销毁
iframes
,例如:

window.onbeforeunload = function() {
    theIframe.parentNode.removeChild(theIframe);
    theIframe = undefined;
};
(我假设您在某处引用了iframe。)

编辑:甚至可以先在别处导航iframe:

window.onbeforeunload = function() {
    theIframe.src = "about:blank";             // <== New bit
    theIframe.parentNode.removeChild(theIframe);
    theIframe = undefined;
};
window.onbeforeunload=函数(){
theIframe.src=“about:blank”;//好吧,我想我们已经“工作”了。没有修改javascript。我在http守护进程中为opera制定了特定的规则,它用“403禁止”回复旧的长轮询(为什么我以前没有尝试这个问题:p)。在那些旧套接字上使用简单的close()刚刚让opera重新打开连接


荒谬的是,opera不会关闭那些长时间的投票,即使我关闭浏览器上的选项卡,我也必须关闭整个opera流程。

我查看套接字在服务器端;)即使您单击指向其他站点的链接或关闭opera上的选项卡,连接也不会关闭。长轮询连接似乎只有在您关闭opera进程时才会关闭。@Antti:我明白。我想说的是,如果您尝试做些什么(甚至更多),会发生什么显式让Opera意识到你已经完成了iframe?它确实应该关闭它们,但是…是的,它应该。我们将尝试这种方法。我们的javascript人员在我告诉他这个问题时说了类似的话:)你能在某个地方发布一段实际的代码吗。如果没有p,很难分析和提出解决方案请举个例子。