以下是该方案:
AsyncContext
)从1个线程/连接模型转移到新实现; 我需要帮助理解的一件事是实现“通知程序”机制的最佳/最安全的方法。
最简单的方法是标准示例:1个线程等待新消息,然后循环AsyncContext
列表并为每个消息调用aCtx.getResponse().getWriter().print(message)
。
现在,我关心的是当连接速度较慢的客户端时会发生什么(考虑到我们可能有1000个,这种情况总是如此)。通知程序线程是否会被阻塞或浪费太多时间等待这些慢速客户端并影响每个人?这可能是微不足道的,但是对于我来说,如果“写入”是异步或阻塞,或者输出缓冲区是否会至少补偿这一点,我就不清楚了。
或者为每个连接的客户端创建一个Runnable
(可以执行aCtx.getResponse().getWriter().print(message)
)并使用固定的线程池将其提交给Executor
更好吗?我不确定是否创建让我们说4000 Runnable
一次(对于每条消息)有意义或性能如何。
最后一点,是否有人使用Tomcat 7为这种应用程序(asynch servlet)提供真实/生产经验?我应该考虑在这个领域做好生产吗?感谢。