WebSocket使用初探(Tornado+Nginx)

使用場景

在web開發(fā)中有時候需要實(shí)時獲取數(shù)據(jù)茫蛹,可以采用的方法也很多,比如ajax輪詢烁挟,長連接等婴洼。之前項(xiàng)目中有一個需求是實(shí)時的日志展示,實(shí)時性要求高
還有根據(jù)歷史監(jiān)控?cái)?shù)據(jù)進(jìn)行趨勢圖的繪制撼嗓,數(shù)據(jù)量巨大柬采,等待時間長欢唾。那么如果使用http請求來處理則面臨著超時的問題,如果用ajax頻繁的輪詢將對服務(wù)器造成很大的壓力粉捻。websocket提供了客戶端和服務(wù)器進(jìn)行雙向?qū)崟r的全雙工通信的方法礁遣。并且絕大多數(shù)現(xiàn)代瀏覽器都支持websocket,因此需要使用nginx對websocket服務(wù)進(jìn)行反代和負(fù)載均衡肩刃,nginx從1.3版本后開始支持websocket祟霍。項(xiàng)目用到的tornado框架也原生支持websocket,看來可以嘗試用websocket來嘗試解決問題树酪。

Tornado的支持

tornado對websocket支持的很好浅碾,通過繼承tornado.websocket.WebSocketHandler類就可以實(shí)現(xiàn)對websocket連接的處理。websocket是在標(biāo)準(zhǔn)
http上實(shí)現(xiàn)的续语,websocket中的握手和http中的握手兼容垂谢,它使用http中的Upgrade協(xié)議頭將連接從http升級到WebSocket,從源碼上可以看出
WebSocketHandler繼承了tornado.web.RequestHandler,因此websocket也可以通過get_argument方法獲取ws://URL?**=傳來的參數(shù)疮茄。
WebSocketHandler提供了一系列方法用以處理連接和消息收發(fā)滥朱,源碼中的docstring描述得很清楚,源碼是最好的文檔沒有之一力试。

class WebSocketHandler(tornado.web.RequestHandler):
"""Subclass this class to create a basic WebSocket handler.

Override `on_message` to handle incoming messages, and use
`write_message` to send messages to the client. You can also
override `open` and `on_close` to handle opened and closed
connections.

See http://dev.w3.org/html5/websockets/ for details on the
JavaScript interface.  The protocol is specified at
http://tools.ietf.org/html/rfc6455.

Here is an example WebSocket handler that echos back all received messages
back to the client:

.. testcode::

  class EchoWebSocket(tornado.websocket.WebSocketHandler):
      def open(self):
          print("WebSocket opened")

      def on_message(self, message):
          self.write_message(u"You said: " + message)

      def on_close(self):
          print("WebSocket closed")

.. testoutput::
   :hide:

...

Nginx配置反向代理和負(fù)載均衡

upstream tornadoes {
    server 127.0.0.1:7000;
    server 127.0.0.1:7001;
}

server {
    listen 8000;
    server_name ***.com;

    location / {
        proxy_pass http://tornadoes;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "Upgrade";
    }
}

nginx默認(rèn)采用循環(huán)的方式分配請求徙邻,循環(huán)的將請求分配到upstream中定義的服務(wù)地址。location中的定義對支持websocket必不可少畸裳。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末缰犁,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子怖糊,更是在濱河造成了極大的恐慌帅容,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,084評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件伍伤,死亡現(xiàn)場離奇詭異并徘,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)扰魂,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,623評論 3 392
  • 文/潘曉璐 我一進(jìn)店門麦乞,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人劝评,你說我怎么就攤上這事姐直。” “怎么了蒋畜?”我有些...
    開封第一講書人閱讀 163,450評論 0 353
  • 文/不壞的土叔 我叫張陵简肴,是天一觀的道長。 經(jīng)常有香客問我百侧,道長砰识,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,322評論 1 293
  • 正文 為了忘掉前任佣渴,我火速辦了婚禮辫狼,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘辛润。我一直安慰自己膨处,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,370評論 6 390
  • 文/花漫 我一把揭開白布砂竖。 她就那樣靜靜地躺著真椿,像睡著了一般。 火紅的嫁衣襯著肌膚如雪乎澄。 梳的紋絲不亂的頭發(fā)上突硝,一...
    開封第一講書人閱讀 51,274評論 1 300
  • 那天,我揣著相機(jī)與錄音置济,去河邊找鬼解恰。 笑死,一個胖子當(dāng)著我的面吹牛浙于,可吹牛的內(nèi)容都是我干的护盈。 我是一名探鬼主播,決...
    沈念sama閱讀 40,126評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼羞酗,長吁一口氣:“原來是場噩夢啊……” “哼腐宋!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起檀轨,我...
    開封第一講書人閱讀 38,980評論 0 275
  • 序言:老撾萬榮一對情侶失蹤胸竞,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后裤园,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體撤师,經(jīng)...
    沈念sama閱讀 45,414評論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,599評論 3 334
  • 正文 我和宋清朗相戀三年拧揽,在試婚紗的時候發(fā)現(xiàn)自己被綠了剃盾。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,773評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡淤袜,死狀恐怖痒谴,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情铡羡,我是刑警寧澤积蔚,帶...
    沈念sama閱讀 35,470評論 5 344
  • 正文 年R本政府宣布,位于F島的核電站烦周,受9級特大地震影響尽爆,放射性物質(zhì)發(fā)生泄漏怎顾。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,080評論 3 327
  • 文/蒙蒙 一漱贱、第九天 我趴在偏房一處隱蔽的房頂上張望槐雾。 院中可真熱鬧,春花似錦幅狮、人聲如沸募强。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,713評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽擎值。三九已至,卻和暖如春逐抑,著一層夾襖步出監(jiān)牢的瞬間鸠儿,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,852評論 1 269
  • 我被黑心中介騙來泰國打工泵肄, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留捆交,地道東北人。 一個月前我還...
    沈念sama閱讀 47,865評論 2 370
  • 正文 我出身青樓腐巢,卻偏偏與公主長得像品追,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子冯丙,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,689評論 2 354

推薦閱讀更多精彩內(nèi)容