通道api:持续断开连接和连接

时间:2015-10-20 11:46:48

标签: google-app-engine go channel-api

我正在使用渠道API,在渠道在终端开通后大约1分钟后我看到了

INFO     2015-10-20 11:18:08,489 module.py:786] default: "POST /_ah/channel/disconnected/ HTTP/1.1" 200 2278
2015/10/20 11:18:10 handlerMain executed
INFO     2015-10-20 11:18:10,482 module.py:786] default: "POST /_ah/channel/connected/ HTTP/1.1" 200 2279
2015/10/20 11:18:13 handlerMain executed
INFO     2015-10-20 11:18:13,486 module.py:786] default: "POST /_ah/channel/disconnected/ HTTP/1.1" 200 2279
2015/10/20 11:18:14 handlerMain executed
INFO     2015-10-20 11:18:14,482 module.py:786] default: "POST /_ah/channel/connected/ HTTP/1.1" 200 2279

依旧......

我的.go文件

func init() {
    http.HandleFunc("/", handlerMain)
}
func handlerMain(w http.ResponseWriter, r *http.Request) {
            log.Println("handlerMain executed")

            c := appengine.NewContext(r)
            tok, err := channel.Create(c, "123")
            if err != nil {
                    panic(err)
            }   
            templ := template.Must(template.ParseFiles("./templates/posts.html"))
            err = templ.Execute(w, map[string]string{
                    "token": tok,
            })  
            if err != nil {
                    panic(err)
            }   
 }

我的.html文件中的javascript

  <script>
    channel = new goog.appengine.Channel('{{.token}}');
    socket = channel.open();
    socket.onopen = onOpened;
    socket.onmessage = onMessage;
    socket.onerror = onError;
    socket.onclose = onClose;
  </script>

如果它只是简单的通知,我可以处理它,但这个断开连接重新执行我的handlerMain()函数,并在这个函数中我想启动goroutine,它将向客户端发送消息,在这种情况下,我将有多个重复我的html页面中的消息。

有什么想法? Channel API有替代品吗?我知道不幸的是,websockets并不适用于GAE

更新: 在浏览器中,我看到GET XMLHttpRequests每秒都会发送到

http://localhost:8080/_ah/channel/dev?command=poll&channel=237c7242478266a2856d947decce4b55-channel-2105948409-1445426965-123&client=1

带标题连接:&#34;保持活跃&#34 ;;

当我将浏览器切换到另一个选项卡时,几秒钟后这些请求被停止(或者非常慢),我开始接收此连接/断开连接通知。如果我跳回页面,会每秒再次发送请求,而不会发送通知。

1 个答案:

答案 0 :(得分:0)

频道连接/断开仅出现在我的Macbook上,而不是PC上。看起来它与app-engine开发服务器有关,这里有更多细节:https://groups.google.com/forum/#!topic/google-appengine-go/dLe2UvzUgdA