2015-10-20 138 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

回答