实现 AsyncContext 通知程序线程

发布于 2024-12-13 16:20:40 字数 755 浏览 2 评论 0原文

场景如下:

  • 典型的Web推送/彗星应用程序,必须同时向3000-4000个连接用户推送短消息;
  • 在 Tomcat 7 上从 1 线程/连接模型迁移到使用 Servlet 3.0 (AsyncContext) 的新实现;

我需要帮助理解的一件事是实现“通知程序”机制的最佳/最安全方法是什么。

最简单的方法是标准示例:1 个线程等待新消息,然后循环 AsyncContext 列表并调用 aCtx.getResponse().getWriter().print(message) 对于每个。

现在,我担心的是当连接速度较慢的客户端时会发生什么(考虑到我们可能有 1000 个客户端,情况总是如此)。通知程序线程是否会被阻塞或浪费太多时间等待这些缓慢的客户端并影响每个人?这可能是微不足道的,但我不清楚“写入”是否是异步的或阻塞的,或者输出缓冲区是否会至少在一定程度上对此进行补偿。

或者最好为每个连接的客户端创建一个 Runnable (这将执行 aCtx.getResponse().getWriter().print(message) )并将其提交给使用固定线程池的Executor?但是,我不确定一次创建 4000 个 Runnable(对于每条消息)是否有意义,或者性能如何。

最后一件事,是否有人有使用 Tomcat 7 进行此类应用程序(异步 servlet)的实际/生产经验?我应该认为它“在该领域已准备好生产吗?”谢谢。

Here's the scenario:

  • typical web push/comet application where short messages must be pushed at the same time to 3000-4000 connected users;
  • moving from 1 thread/connection model to a new implementation using Servlet 3.0 (AsyncContext) on Tomcat 7;

One thing I need help to understand is what's the best/safest aproach in implementing the 'notifier' mechanism.

The simplest way is the standard example: 1 thread waiting for a new message and then looping the AsyncContexts list and calling aCtx.getResponse().getWriter().print(message) for each.

Now, my concern is what happens when there are slow clients connected (and considering we may have 1000s this will always be the case). Could the notifier thread be blocked or waste too much time waiting on these slow clients and affecting everybody? This may be trivial but it's not clear for me if the 'write' is asynch or blocking or if the output buffers would compensate for this at least up to a point.

Or is it better to create for each connected client a Runnable (that would do the aCtx.getResponse().getWriter().print(message) ) and submit it to an Executor using a fixed thread pool? I'm not sure however if creating let's say 4000 Runnable at a time (for each message) makes sense or what the performance would be.

And one last thing, does anyone have real/production experience using Tomcat 7 for this sort of app (asynch servlet)? Should i consider it 'production ready in this area? Thanks.

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

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

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文