Java 服务器使用服务器端作为servlet发送事件
我有一个使用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")
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