Servlets grails中的文本/事件流从头开始呈现(无插件)

Servlets grails中的文本/事件流从头开始呈现(无插件),servlets,grails,controller,push,Servlets,Grails,Controller,Push,要使用push方法,我们使用著名的JS对象EventSource: 这是易于开发的客户端部分: var eventSource = new EventSource("controller/action"); eventSource.onmessage = function(event) { document.getElementById('foo').innerHTML = event.data; }; 然而,我很难

要使用push方法,我们使用著名的JS对象EventSource:

这是易于开发的客户端部分:

        var eventSource = new EventSource("controller/action");

        eventSource.onmessage = function(event) {

            document.getElementById('foo').innerHTML = event.data;

        };
然而,我很难在服务器部分(Grails)中配置push方法

当我在Servlets开发的JEE应用程序中查看时,我可以看到服务器部分如下所示:

在客户部分:

 var eventSource = new EventSource(baseURL+"external/push");
 eventSource.onmessage=function(e){
     console.log(e.data.dt);
 }

不幸的是,我在控制台上没有得到任何结果

我不确定render方法是否能正确处理
“文本/事件流”
,但您可以直接访问操作中的
响应
对象:

def push() {
  //content type must be set to text/event-stream
  response.setContentType("text/event-stream");  

  //encoding must be set to UTF-8
  response.setCharacterEncoding("UTF-8");

  for(int i=0; i<10; i++) {

    response.outputStream.write("data: "+ System.currentTimeMillis() +"\n\n");
    try {
      Thread.sleep(1000);
    } catch (InterruptedException e) {
      e.printStackTrace();
    }
  }
  response.outputStream.flush()
}
def push(){
//内容类型必须设置为文本/事件流
response.setContentType(“文本/事件流”);
//编码必须设置为UTF-8
响应。setCharacterEncoding(“UTF-8”);

对于(int i=0;i我不确定渲染方法是否正确处理
'text/event stream'
,但您可以直接访问操作中的
响应
对象:

def push() {
  //content type must be set to text/event-stream
  response.setContentType("text/event-stream");  

  //encoding must be set to UTF-8
  response.setCharacterEncoding("UTF-8");

  for(int i=0; i<10; i++) {

    response.outputStream.write("data: "+ System.currentTimeMillis() +"\n\n");
    try {
      Thread.sleep(1000);
    } catch (InterruptedException e) {
      e.printStackTrace();
    }
  }
  response.outputStream.flush()
}
def push(){
//内容类型必须设置为文本/事件流
response.setContentType(“文本/事件流”);
//编码必须设置为UTF-8
响应。setCharacterEncoding(“UTF-8”);
对于(int i=0;i
def push={
response.setContentType(“文本/事件流”);
对于(def i=0;i
def push={
response.setContentType(“文本/事件流”);

对于(def i=0;我知道这个方法,我也使用过它,但是,我想使用render render的优雅语法(contentType:'text/event stream'){}我知道这个方法,也使用过它,但是,我想使用render render的优雅语法(contentType:'text/event stream'){}你可能想解释你的答案,让提问者了解哪里出了问题。你可能想解释你的答案,让提问者了解哪里出了问题
def push() {
  //content type must be set to text/event-stream
  response.setContentType("text/event-stream");  

  //encoding must be set to UTF-8
  response.setCharacterEncoding("UTF-8");

  for(int i=0; i<10; i++) {

    response.outputStream.write("data: "+ System.currentTimeMillis() +"\n\n");
    try {
      Thread.sleep(1000);
    } catch (InterruptedException e) {
      e.printStackTrace();
    }
  }
  response.outputStream.flush()
}
def push = {
    response.setContentType("text/event-stream");
    for(def i=0;i<10;i++) {
        render("data $i: ${System.currentTimeMillis()}\n");
        sleep(1000)
    }
}