0

我们遇到了长轮询和歌剧的问题。我自己是一名 c 程序员,并且已经为我们的需要开发了一个定制的 http-daemon。在这种情况下,我们需要一个能够处理大量连接的长轮询服务器。

问题是,即使在单击站点上的某些链接并且当然会打开新的链接之后,Opera 也会以某种方式使这些长民意调查保持打开状态。我们使用基本的长轮询技术,它试图在 iframe 中包含 javascript。这适用于其他浏览器,但即使我强制以前的民意调查在服务器端关闭,opera 也会重新打开它们。这不是很好,因为在高流量站点上,只有少数 opera 用户可以通过浏览站点导致守护程序快速耗尽免费文件描述符(因为站点上的每次点击都会打开一个新的长轮询,而旧的不会关闭)。页面刷新不会导致相同的结果,它会做正确的事情:关闭长轮询并打开一个新轮询。关闭opera后,所有文件描述符都关闭了,一切都很好了。

那么,我应该在 http-daemon 中为歌剧添加一些特定的标头还是我们的 javascript 有问题?

编辑:使用版本测试:Opera/9.80 (X11; Linux x86_64; U; en) Presto/2.6.30 Version/10.63

4

2 回答 2

0

我们使用基本的长轮询技术,它试图在 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;
};
于 2011-02-01T15:54:02.090 回答
0

好吧,我认为我们让它“工作”了.. 没有修改 javascript。我在 http-daemon 中为歌剧制定了特定规则,它以“403 Forbidden”回复旧的长民意调查(为什么我之前没有尝试过这个问题:P)。那些旧套接字上的简单 close() 只是让歌剧重新打开连接。

即使我关闭浏览器上的选项卡,opera 也不会关闭那些长民意调查,这太荒谬了,我必须关闭整个 opera 进程。

于 2011-02-02T09:14:49.890 回答