javascript和revel golang服务器之间的长轮询

时间:2016-11-09 12:52:35

标签: jquery ajax go long-polling revel

我正在尝试进行ajax调用(使用jquery)并在它们到达时立即从服务器呈现响应。在服务器中,我会在准备好后立即发送不同的响应。如果我使用curl发出请求,我可以通过响应看到它们如何在屏幕响应中打印。但我无法使用jquery ajax做类似的事情。

服务器上的代码是这样的:

flusher, ok := app.Response.Out.(http.Flusher)
if !ok {
  panic("expected http.ResponseWriter to be an http.Flusher")
}

app.Response.Out.Header().Set("Connection", "Keep-Alive")
app.Response.Out.Header().Set("Transfer-Encoding", "chunked")
app.Response.Out.Header().Set("X-Content-Type-Options", "nosniff")
fmt.Fprintf(app.Response.Out, string(JsonOffers))
flusher.Flush()

这段代码正在调用循环。 app.Response.Outhttp.ResponseWriter

我的请求是一个普通的jquery.ajax函数:

  jQuery.ajax({
    url: '/ndc',
    type: "POST",
    data: ODRequest,
    success: function(offers){
      console.log( 'Offers', offers )
    },
    error: function(x,y,z){console.log("ERROR", x);}
  })

有了这个,我得到了所有的优惠,但只有在最后一个回复得到处理时,而不是一个一个。

在服务器控制台上我还能看到这一点......(我不知道它是否可能很重要):

server.go:2161: http: multiple response.WriteHeader calls

1 个答案:

答案 0 :(得分:0)

请更准确地描述一下程序,你的应用程序的工作原理是这样的吗?

Js脚本应该向服务器发送请求,并且当收到响应时再次发送请求。

var ajaxFunc = function () {
  // handle response and again call
  ajaxFunc();
};

当服务器收到请求时,它必须运行一个循环一段时间(可能是20-30秒),并将更新发送到客户端