首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >是从Tomcat 6 CometProcessor非阻塞的内部写入的。

是从Tomcat 6 CometProcessor非阻塞的内部写入的。
EN

Stack Overflow用户
提问于 2008-09-20 20:36:40
回答 1查看 2.2K关注 0票数 0

我有一个CometProcessor实现,它有效地对潜在的大量客户端执行多播操作。当发生需要传播到所有客户端的事件时,CometProcessor将需要循环遍历写出响应的客户端列表。如果写入响应阻塞,则存在潜在的慢客户端可能会对事件的分布产生不利影响的可能性。示例:

代码语言:javascript
复制
public class MyCometProcessor implements CometProcessor {
    private List<Event> connections = new ArrayList<Event>();
    public void onEvent(byte[] someInfo) {
        synchronized (connections) {
            for (Event e : connections) {
                HttpServletResponse r = e.getHttpResponse();

                // -- Does this line block while waiting for I/O --
                r.getOutputStream().write(someInfo);
            }
        }
    }

    public void event(CometEvent event) {
        switch (event.getEventType()) {
        case READ:
            synchronzied (connections) {
                connections.add(event);
            }
            break;
        // ...
        }

    }
}

更新:回答我自己的问题。来自CometProcessor的写入正在阻塞:

http://tomcat.apache.org/tomcat-6.0-doc/config/http.html

请参阅页面底部的表格。

EN

回答 1

Stack Overflow用户

发布于 2008-09-21 13:19:45

Tomcat6 6的HttpServlerResponse实现是响应类。在内部,它使用包装在CoyoteOutputStream上的OutputBuffer。顾名思义,这个类是一个缓冲区,默认大小为8k。所以,我想说的是,至少如果你的写作少于8k,那么你就不会阻止。您可能需要刷新您的客户来查看数据,这意味着它最终取决于您正在使用的连接器变体。在连接器配置中,如果需要非阻塞写入,则指定

protocol=org.apache.coyote.http11.Http11NioProtocol

此连接器/协议具有大规模可配置性:

http://tomcat.apache.org/tomcat-6.0-doc/config/http.html

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/109294

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档