out.print 不将数据推送到浏览器

Posted

技术标签:

【中文标题】out.print 不将数据推送到浏览器【英文标题】:out.print not pushing the data to browser 【发布时间】:2013-03-09 12:39:15 【问题描述】:

我有一个带有while (true) 的JSP,其中数据被发送到浏览器。代码sn-p

while (true) 
    out.print("pushing some data to browser");
    out.flush();

    try 
        Thread.sleep(1000);
     catch (InterruptedException e) 
    

它大部分时间都可以工作,但很少会以 1 秒的间隔将数据发送到浏览器。

而不是排队,同时抛出所有数据。

【问题讨论】:

周期性发送数据的动机是什么?您是否正在尝试实现 Comet 消息传递系统? 我将此循环用作 pushlet 概念(将数据从服务器推送到客户端) 【参考方案1】:

这是为什么它不起作用的解释: JSP 在运行时是一个 servlet 对象,JSP 脚本/表达式作为 Servlet 对象的 service() 方法的一部分被调用。

在这种情况下,当您访问 JSP 页面时,它会调用 service() 方法并继续将数据附加到流中,直到线程被应用服务器中断(InterruptedException),最后它会立即呈现页面并显示数据。

您应该考虑通过扩展可以保留应用服务器支持的 HttpServlet 来实现 CommetServlet。

App Server comet 支持示例:

雄猫:http://tomcat.apache.org/tomcat-6.0-doc/aio.htm 码头:http://download.eclipse.org/jetty/stable7/apidocs/org/eclipse/jetty/continuation/ContinuationSupport.html 树脂:http://caucho.com/resin-3.1/examples/servlet-comet/

【讨论】:

以上是关于out.print 不将数据推送到浏览器的主要内容,如果未能解决你的问题,请参考以下文章

Kafka-Connect Cassandra Sink 连接器不将数据推送到 Cassandra

将文件推送到 Github/Gitlab 而不将其添加到 .git?

将数据从网络服务器推送到浏览器的方法

Nodejs - 简单的 socket.io 示例不会将数据推送到所有浏览器

在 Web 应用程序中接收数据并推送到客户端浏览器的套接字

来自/到 pubsub 和 websocket 的实时转换推送到客户端