4 回答

TA貢獻(xiàn)2039條經(jīng)驗(yàn) 獲得超8個(gè)贊
Tornado專為長輪詢而設(shè)計(jì),在/ examples / chatdemo中包含一個(gè)非常小的(幾百行Python)聊天應(yīng)用程序,包括服務(wù)器代碼和JS客戶端代碼。它的工作原理如下:
客戶端使用JS來請求更新(上一條消息的數(shù)量),服務(wù)器URLHandler接收這些更新并添加回調(diào)以響應(yīng)客戶端到隊(duì)列。
當(dāng)服務(wù)器獲取新消息時(shí),onmessage事件將觸發(fā),循環(huán)回調(diào)并發(fā)送消息。
客戶端JS接收消息,將其添加到頁面,然后請求自此新消息ID以來的更新。

TA貢獻(xiàn)1815條經(jīng)驗(yàn) 獲得超10個(gè)贊
我認(rèn)為客戶端看起來像是一個(gè)普通的異步AJAX請求,但是你希望它需要“很長時(shí)間”才能回來。
然后服務(wù)器看起來像這樣。
while (!hasNewData()) usleep(50);outputNewData();
因此,AJAX請求進(jìn)入服務(wù)器,可能包括上次更新時(shí)間的時(shí)間戳,以便您hasNewData()
知道已經(jīng)獲得了哪些數(shù)據(jù)。然后服務(wù)器處于休眠狀態(tài),直到新數(shù)據(jù)可用。一直以來,你的AJAX請求仍然是連接的,只是掛在那里等待數(shù)據(jù)。最后,當(dāng)有新數(shù)據(jù)可用時(shí),服務(wù)器會將其提供給您的AJAX請求并關(guān)閉連接。
- 4 回答
- 0 關(guān)注
- 514 瀏覽
添加回答
舉報(bào)