1. 程式人生 > >1. Tornado實現聊天室

1. Tornado實現聊天室

Tornado的非同步I/O機制使其很適合處理長連線的場景,在官方提供的Demo中就有一個簡單的聊天室實現,大致做法如下:

1. 提供一個全域性的訊息快取

2. 每次獲取新訊息時,如果快取中沒有新訊息出現,則一直等待

3. 前端使用ajax不斷輪詢新訊息並顯示,當沒有新訊息時,意味著前端會和tornado保持一個長時間不活躍的連線

然後,使用Nginx來為Tornado做反向代理,使用Chrome來訪問聊天室,看到開發者工具的console中報了大量504(Gateway Time-out)錯誤;檢視Nginx日誌,可以看到如下資訊:

upstream timed out (110: Connection timed out) while reading response header from upstream

通過前面的程式碼學習,我們知道,客戶端的訊息輪詢會導致Nginx和Tornado之間建立HTTP連線,當沒有新訊息出現時,Tornado不會返回響應給Nginx,Nginx是很沒有耐心的,它預設只會給upstream 60s時間來返回響應,超過這個時間後,就會向客戶端返回504錯誤了。那麼針對這個簡單的例子,我們把Nginx的這個等待時間提高一些就可以了,如下所示將等待時間提高到7200s:

proxy_read_timeout 7200;