Google app engine 通道api:持续断开连接和连接

Google app engine 通道api:持续断开连接和连接,google-app-engine,go,channel-api,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/ch

我正在使用通道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
等等

我的。去吧

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)
            }   
 }
来自my.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>
与标题连接:“保持活动”


当我将浏览器切换到另一个选项卡时,几秒钟后,这些请求停止(或速度大大减慢),我开始接收此连接/断开通知。如果我跳回该页面,请求将每秒再次发送,并且没有通知。

通道连接/断开连接仅显示在我的macbook上,而不是在PC上。看起来这与app engine development server有关,这里有更多详细信息:

通道连接/断开连接仅显示在我的macbook上,不在PC上。看起来它与app engine development server有关,这里有更多详细信息:

我不明白您在这里试图实现什么(不熟悉Go),或者为什么您的“/”主处理程序被发送到/_ah/channel/*routes的POST请求调用。断开连接通常源于客户端切换到其他页面或进行页面刷新。换句话说,如果页面加载,客户端将调用/_ah/channel/connect;如果页面“关闭”,客户端将调用/_ah/channel/disconnect。通常,您会向应用程序中添加连接处理程序和断开连接处理程序,这与“/.@Ani”的handlerMain不同,在这种情况下,我应该只在您提到的情况下接收到对*/connect和/断开连接的请求。在这个例子中,我成功地打开了通道并收到了一个POST/_ah/channel/connect。所以现在一切都很好。但过了一段时间,(我对网页什么也不做,只是盯着它看)连接和断开连接开始一个接一个地进行,如上所述。看起来通道有某种超时。是的,handlerMain应该只在页面重新加载后执行,所以这是另一个problem@Kain我已经检查了我的日志,我没有看到随机断开连接,通道API在我的应用程序(Python)中的推送通知工作正常。可能是客户端代码中的某些内容使浏览器发送断开连接后的请求?你看过浏览器的开发者工具/控制台了吗?@Ani请看编辑后的帖子。我发现只有在浏览器中的localhost选项卡处于非活动状态时才会发生重新连接。我不明白您在这里试图实现什么(不熟悉Go),也不明白为什么您的“/”主处理程序被发送到/_ah/channel/*routes的POST请求调用。断开连接通常源于客户端切换到其他页面或进行页面刷新。换句话说,如果页面加载,客户端将调用/_ah/channel/connect;如果页面“关闭”,客户端将调用/_ah/channel/disconnect。通常,您会向应用程序中添加连接处理程序和断开连接处理程序,这与“/.@Ani”的handlerMain不同,在这种情况下,我应该只在您提到的情况下接收到对*/connect和/断开连接的请求。在这个例子中,我成功地打开了通道并收到了一个POST/_ah/channel/connect。所以现在一切都很好。但过了一段时间,(我对网页什么也不做,只是盯着它看)连接和断开连接开始一个接一个地进行,如上所述。看起来通道有某种超时。是的,handlerMain应该只在页面重新加载后执行,所以这是另一个problem@Kain我已经检查了我的日志,我没有看到随机断开连接,通道API在我的应用程序(Python)中的推送通知工作正常。可能是客户端代码中的某些内容使浏览器发送断开连接后的请求?你看过浏览器的开发者工具/控制台了吗?@Ani请看编辑后的帖子。我发现只有当浏览器中的localhost选项卡处于非活动状态时,才会发生重新连接。
http://localhost:8080/_ah/channel/dev?command=poll&channel=237c7242478266a2856d947decce4b55-channel-2105948409-1445426965-123&client=1