2015-10-20 139 views
1

我使用通道API,并在之后终端渠道的开放约1分钟后我看到通道API:永久断开和连接

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 

等..

我。去文件

从我的.html文件
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) 
      } 
} 

的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()函数,并在此功能,我想谈谈够程将消息发送到客户端,在这种情况下,我将有多次重复消息在我的HTML页面。

有什么想法? Channel API是否有其他选择?我知道的WebSockets遗憾的是不与GAE工作

UPDATE: 在浏览器中我看到GET在XMLHttpRequest的每秒发送到

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

与管连接:“保持活动”;

当我切换到浏览器的另一个标签,这些请求停止(或很慢下来)几秒钟后,我开始收到此连接/断开通知。如果我跳回页面,请求会每秒发送一次,并且没有通知。

+1

我不明白你想在这里实现(不熟悉的围棋),或为什么你的主处理程序“/”叫什么通过POST请求到/ _ah/channel/*路由。断开连接通常源于客户端切换到不同的页面或进行页面刷新。换句话说,如果页面加载,客户端将调用/ _ah/channel/connect,如果页面“关闭”,客户端将调用/ _ah/channel/disconnect。通常,您会为您的应用添加连接处理程序和断开连接处理程序,与“/”的handlerMain不同。 – Ani

+0

@Ani,情况是这样的,我应该收到请求* /连接和/断开只有你提到的情况。在这个例子中,我成功打开频道并接收一个POST/_ah /频道/连接。所以现在一切都很好。但是,过了一段时间后(我对网页无所作为,只是盯着它)连接和断开连接开始如下所述。它看起来像频道有某种超时。 – Kaign

+0

是的,handlerMain只应在页面重载执行,因此,这是另一个问题 – Kaign

回答