Java 服务器使用服务器端作为servlet发送事件

Java 服务器使用服务器端作为servlet发送事件,java,javascript,html,servlets,Java,Javascript,Html,Servlets,我有一个使用servlet运行的简单服务器发送事件的实现 protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub try { System.out.println("Server Sent Events")

我有一个使用servlet运行的简单服务器发送事件的实现

protected void doGet(HttpServletRequest request, HttpServletResponse response) 
throws ServletException, IOException {
    // TODO Auto-generated method stub

    try
    {
        System.out.println("Server Sent Events");
        response.setContentType("text/event-stream");

        PrintWriter pw = response.getWriter();
        int i=0;
        pw.write("retry: 30000\n"); 
        System.out.println("----------------------");
        while(true)
        {
            i++;

            pw.write("data: "+ i + "\n\n");
            System.out.println("Data Sent : "+i);
            if(i>10)
                break;
        }

    }catch(Exception e){
        e.printStackTrace();
    }
}
我的客户端代码是

<!DOCTYPE html>
<html>
<body onload ="SSE()" >
<script>

    function SSE()
    {
        var source = new EventSource('GetDate');  
        source.onmessage=function(event)
        {
            document.getElementById("result").innerHTML+=event.data + "<br />";
        };
    }
</script>
<output id ="result"></output>

</body>
</html>

函数SSE()
{
var source=neweventsource('GetDate');
source.onmessage=函数(事件)
{
document.getElementById(“结果”).innerHTML+=event.data+“
”; }; }
但谁能解释一下这到底是怎么回事? 服务器如何一次性发送11个整数块? 有必要在这里冲洗或关闭打印机吗。
服务器是否每次建立新连接以发送数据

响应流将内容写入http数据包的消息体。在循环整数时,所有整数都会一个接一个地添加到内容中。除非在流上未关闭flush/close,否则您可以继续在流上写入,并且在发送响应时,所有内容都将立即发送


还有一些关于刷新和关闭的注意事项。您不需要刷新,servletcontainer将为您刷新和关闭它。close by way已经隐式调用了flush。调用flush通常只有在同一个流上有多个写入程序并且希望切换写入程序(例如,包含混合二进制/字符数据的文件)时,或者在不确定的时间内(例如,日志文件)保持流指针打开时才有用。

不完全是重复的,但是使用
while
循环有什么特殊原因吗?你从0数到10,这是
for
循环的共同目的…你到底不明白什么,你已经明白了什么?你是怎么想知道“它”是怎么工作的?对我来说,输入一些代码并说“请解释”似乎不是一个好问题……谢谢@josephdreamer