Ajax 长轮询无法正常工作

发布于 2024-11-09 22:55:53 字数 401 浏览 6 评论 0原文

我正在 MVC 2 中使用长轮询开发一个简单的陌生人聊天应用程序。如果我在不同的浏览器中打开该应用程序,它在我的开发机器上工作正常。我的意思是,如果我在 IE 和 mozilla 中加载该应用程序,

如果我采用浏览器的两个选项卡中的应用程序(例如:IE),长轮询不会从两个选项卡触发。我的意思是,有一个开始按钮可以启动触发长轮询的聊天。我可以看到它在调试时调用操作。我的问题是,当我从选项卡一单击开始按钮时,它会触发 ajax 请求(长轮询(此请求在服务器上等待,直到另一个请求到来))。然后我单击选项卡二中的启动按钮,在服务器返回第一个请求之前(超时后),它不会触发 ajax 请求。

为什么会发生这种情况?我读到浏览器会阻止多个 ajax 请求..这是原因吗? ..如果我使用不同的浏览器,它工作正常。只有当我在同一浏览器中使用两个选项卡时才会出现问题

I am developing a simple strangers chat application using long polling in MVC 2. Its works fine in my development machine if i am opening the application different browsers.. i mean if i loaded the application in IE and mozilla, it works fine

if i took the appliction in two tabs of a browser (eg:IE) , the long polling are not firing from both tabs.. I mean, there is a start button to start chat which fire long polling. I can see it calling actions while debugging.. And my problem is, When i clicked start button from tab one , it fire a ajax request (long polling ( this req wait at server till another reqst comes)).and then i click the start button in tab two, it does not fire the ajax request until the first request is returned from the server(after timeout).

why this is happening? I read like browser will block multiple ajax request..Is that a reason for that? ..It work fine if i am using different browsers.The problem only came if i took two tab in same browser

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

淡忘如思 2024-11-16 22:55:53

我读到浏览器会阻止多个ajax请求。

是的,如果您使用会话,ASP.NET 会阻止来自同一会话的并发请求。引自文档

访问 ASP.NET 会话状态是
每个会话独占,这意味着
如果两个不同的用户
并发请求,访问每个
授予单独会议
同时。然而,如果两个
并发请求是针对
同一会话(通过使用相同的
SessionID值),第一次请求
获得对会话的独占访问权限
信息。第二个请求
仅在第一个请求后执行
完成了。 (第二次会议可以
如果独占锁也可以获得访问权限
信息被释放是因为
第一个请求超出了锁
超时。)如果 EnableSessionState
@Page 指令中的值已设置
为只读,请求
只读会话信息不
导致独占锁
会话数据。然而,只读
对会话数据的请求可能仍然
必须等待由a设置的锁
对会话数据的读写请求
清楚。

还要确保您已禁用缓存。例如,如果您使用 jquery,则在轮询时使用 cache: false 选项:

$.ajax({
    url: '/poll',
    cache: false,
    success: function(result) {
        // ...
    }
});

I read like browser will block multiple ajax request.

Yes, if you use sessions, ASP.NET blocks concurrent requests from the same session. Quote from the documentation:

Access to ASP.NET session state is
exclusive per session, which means
that if two different users make
concurrent requests, access to each
separate session is granted
concurrently. However, if two
concurrent requests are made for the
same session (by using the same
SessionID value), the first request
gets exclusive access to the session
information. The second request
executes only after the first request
is finished. (The second session can
also get access if the exclusive lock
on the information is freed because
the first request exceeds the lock
time-out.) If the EnableSessionState
value in the @ Page directive is set
to ReadOnly, a request for the
read-only session information does not
result in an exclusive lock on the
session data. However, read-only
requests for session data might still
have to wait for a lock set by a
read-write request for session data to
clear.

Also make sure that you have disabled caching. For example if you use jquery use the cache: false option when polling:

$.ajax({
    url: '/poll',
    cache: false,
    success: function(result) {
        // ...
    }
});
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文