青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

陳碩的Blog

Muduo 網絡編程示例之九:簡單的消息廣播服務

Muduo 網絡編程示例之九:簡單的消息廣播服務

陳碩 (giantchen_AT_gmail)

Blog.csdn.net/Solstice  t.sina.com.cn/giantchen

這是《Muduo 網絡編程示例》系列的第九篇文章,講用 muduo 實現一個簡單的 pub/sub 服務

Muduo 全系列文章列表: http://blog.csdn.net/Solstice/category/779646.aspx

本文介紹用 muduo 實現一個簡單的 topic-based 消息廣播服務,這其實是“聊天室”的一個簡單擴展,不過聊天的不是人,而是分布式系統中的程序。

本文的代碼見 http://code.google.com/p/muduo/source/browse/trunk/examples/hub

 

在分布式系統中,除了常用的 end-to-end 通信,還有一對多的廣播通信。一提到“廣播”,或許會讓人聯想到 IP 多播或 IP 組播,這不是本文的主題。本文將要談的是基于 TCP 協議的應用層廣播。示意圖如下:

hub

上圖中圓角矩形代表程序,"Hub"是一個服務程序,不是網絡集線器,它起到類似集線器的作用,故而得名。Publisher 和 Subscriper 通過 TCP 協議與 Hub 程序通信。Publisher 把消息發到某個 topic 上,Subscribers 訂閱該 topic,然后就能收到消息。即 publisher 借助 hub 把消息廣播給了多個 subscribers。這種 pub/sub 結構的好處在于可以增加多個 Subscriber 而不用修改 Publisher,一定程度上實現了“解耦”(也可以看成分布式的 observer pattern)。 由于走的是 TCP 協議,廣播是基本可靠的,這里的“可靠”指的是“比 UDP 可靠”,不是“完全可靠”。(思考:如何避免 Hub 成為 single point of failure?)

為了避免串擾(cross-talk),每個 topic 在同一時間只應該有一個 publisher,hub 不提供 compare-and-swap 操作。

(“可靠廣播、原子廣播”在分布式系統中有重大意義,是以 replicated state machine 方式實現可靠的分布式服務的基礎,“可靠廣播”涉及 consensus 算法,超出了本文的范圍。)

 

應用層廣播在分布式系統中用處很大,這里略舉幾例:

1. 體育比分轉播。有 8 片比賽場地正在進行羽毛球比賽,每個場地的計分程序把當前比分發送到各自的 topic 上(第 1 號場地發送到 court1,第 2 號發送到 court2,以此類推)。需要用到比分的程序(賽場的大屏幕顯示,網上比分轉播等等)自己訂閱感興趣的 topic ,就能及時收到最新比分數據。由于本文實現的不是 100% 可靠廣播,那么消息應該是 snapshot,而不是 incremental。(換句話說,消息的內容是“現在是幾比幾”,而不是“剛才誰得分”。)

2. 負載監控。每臺機器上運行一個監控程序,周期性地把本機當前負載(CPU、網絡、磁盤、溫度)publish 到以 hostname 命名的 topic 上,這樣需要用到這些數據的程序只要在 hub 訂閱相應的 topic 就能獲得數據,無需與多臺機器直接打交道。(為了可靠起見,監控程序發送的消息里邊應該包含時間戳,這樣能防止 stale 數據,甚至一定程度上起到心跳的作用。)沿著這個思路,分布式系統中的服務程序也可以把自己的當前負載發布到 hub 上,供 load balancer 和 monitor 取用。

協議

為了簡單起見,muduo 的 hub 示例采用以 '\r\n' 分界的文本協議,這樣用 telnet 就能測試 hub。協議只有三個命令:

  • sub <topic>\r\n
    • 該命令表示訂閱 <topic>,以后該 topic 有任何跟新都會發給這個 tcp 連接。在 sub 的時候,hub 會把該 <topic> 上最近的消息發給此 subscriber。
  • unsub <topic>\r\n
    • 該命令表示退訂 <topic>
  • pub <topic>\r\n<content>\r\n
    • 往 <topic> 發送消息,內容為 <content>。所有訂閱了此 <topic> 的 subscribers 會收到同樣的消息“pub <topic>\r\n<content>\r\n”

代碼

muduo 示例中的 hub 分為幾個部分:

一個程序可以既是 publisher 又是 subscriber,而且 pubsub 庫只用一個 tcp 連接(這樣 failover 比較簡便)。

使用范例:

  1. 開啟 4 個命令行窗口
  2. 在第一個窗口運行 $ hub 9999
  3. 在第二個窗口運行 $ sub 127.0.0.1:9999 mytopic
  4. 在第三個窗口運行 $ sub 127.0.0.1:9999 mytopic court
  5. 在第四個窗口運行 $ pub 127.0.0.1:9999 mytopic "Hello world."  ,這時第二三號窗口都會打印 “mytopic: Hello world.”,表明收到了 mytopic 這個主題上的消息。
  6. 在第四個窗口運行 $ pub 127.0.0.1:9999 court "13:11"  ,這時第三號窗口會打印 “court: 13:11”,表明收到了 court 這個主題上的消息。第二號窗口沒有訂閱此消息,故無輸出。

借助這個簡單的 pub/sub 機制,還可以做很多有意思的事情。比如把分布式系統中的程序的一部分 end-to-end 通信改為通過 pub/sub 來做(例如,原來是 A 向 B 發一個 SOAP request,B 通過同一個 tcp 連接發回 response (分析二者的通信只能通過查看 log 或用 tcpdump 截獲);現在是 A 往 topic_a_to_b 上發布 request,B 在 topic_b_to_a 上發 response),這樣多掛一個 monitoring subscriber 就能輕易地查看通信雙方的溝通情況,很容易做狀態監控與 trouble shooting。

posted on 2011-05-25 23:21 陳碩 閱讀(2406) 評論(2)  編輯 收藏 引用 所屬分類: muduo

評論

# re: Muduo 網絡編程示例之九:簡單的消息廣播服務 2011-05-26 01:31 tfzxyinhao

能不能多寫一些你的庫的特色以及這種特色的原理,是怎么實現的。怎么優化的。。。。
  回復  更多評論   

# re: Muduo 網絡編程示例之九:簡單的消息廣播服務 2011-05-26 10:22 陳碩

@tfzxyinhao
有此計劃。  回復  更多評論   

<2015年10月>
27282930123
45678910
11121314151617
18192021222324
25262728293031
1234567

導航

統計

常用鏈接

隨筆分類

隨筆檔案

相冊

搜索

最新評論

閱讀排行榜

評論排行榜

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            亚洲在线视频免费观看| 中文国产成人精品久久一| 欧美一区二区三区免费视| 免费观看欧美在线视频的网站| 免费看的黄色欧美网站| 午夜日韩电影| 精品av久久707| 欧美一区二区三区免费在线看 | 久久久天天操| 亚洲欧美网站| 激情91久久| 久久精品国产精品| 欧美国产日产韩国视频| 亚洲精品孕妇| 国产精品久久久久久久久久尿 | 狂野欧美激情性xxxx| 欧美亚日韩国产aⅴ精品中极品| 99re在线精品| 欧美日韩情趣电影| 亚洲私人黄色宅男| 一区二区三区国产在线观看| 国产精品美女www爽爽爽视频 | 亚洲国产mv| 国内精品久久久久久久97牛牛| 欧美亚洲视频一区二区| 女人天堂亚洲aⅴ在线观看| 欧美综合国产精品久久丁香| 亚洲韩国精品一区| 今天的高清视频免费播放成人| 欧美在线地址| 欧美**人妖| 久久精品五月| 亚洲视频第一页| 亚洲欧洲中文日韩久久av乱码| 老色批av在线精品| 欧美freesex交免费视频| 久久综合久久88| 一区二区三区四区五区精品视频 | 久久国产黑丝| 国产精品视频一二| 亚洲美女在线观看| 国语自产偷拍精品视频偷| 亚洲一区二区视频在线| 樱花yy私人影院亚洲| 一级日韩一区在线观看| 可以免费看不卡的av网站| 国产精品九色蝌蚪自拍| 黄色资源网久久资源365| 欧美成人在线网站| 久久狠狠亚洲综合| aa国产精品| 免费不卡中文字幕视频| 亚洲欧美日韩第一区| 国产欧美精品va在线观看| 男人的天堂亚洲在线| 欧美成人性网| 亚洲第一天堂无码专区| 亚洲欧洲午夜| 99在线精品免费视频九九视| 欧美在线观看网站| 欧美激情按摩| 久久成人综合网| 欧美va亚洲va日韩∨a综合色| 一区二区三区国产在线| 欧美一区二区在线免费观看| 一个人看的www久久| 久久日韩粉嫩一区二区三区| 久久国产66| 国内伊人久久久久久网站视频| 欧美在线亚洲在线| 久久亚洲一区| 欧美专区在线观看一区| 免费成人高清在线视频| 久久精品一区| 国产欧美在线观看一区| 蜜臀av在线播放一区二区三区| 欧美日韩精品不卡| 亚洲黄色在线看| 在线观看国产精品网站| 国产精品稀缺呦系列在线| 久久精品视频免费播放| 欧美日韩一区二区三区高清| 久久久久久穴| 国产亚洲午夜| 欧美一区二区在线看| 久久成人亚洲| 极品少妇一区二区| 欧美成人性生活| 一区二区三区国产盗摄| 在线亚洲高清视频| 欧美性猛交xxxx乱大交退制版| 久久久久久久综合| 在线看欧美日韩| 欧美三级视频在线播放| 一二三区精品| 久久成人免费电影| 伊人伊人伊人久久| 久久日韩粉嫩一区二区三区| 欧美国产日韩二区| 亚洲欧美日韩人成在线播放| 最近中文字幕日韩精品| 欧美暴力喷水在线| 99视频一区二区| 亚洲一区二区黄色| 亚洲一二三区视频在线观看| 午夜影院日韩| 亚洲欧美日韩国产中文在线| 韩国精品在线观看| 久久亚洲精品视频| 亚洲欧洲在线免费| 麻豆精品91| 亚洲欧美日韩国产中文| 国内精品模特av私拍在线观看| 久久精品综合一区| 亚洲国产成人精品久久久国产成人一区| 在线看片成人| 亚洲国产毛片完整版| 欧美中文在线视频| 国产日本欧美一区二区三区在线| 欧美一级欧美一级在线播放| 亚洲国产一区在线| 亚洲自啪免费| 亚洲午夜视频在线观看| 亚洲天堂免费观看| 亚洲人成7777| 性欧美18~19sex高清播放| 日韩视频在线观看一区二区| 国产综合亚洲精品一区二| 欧美视频一区二区三区…| 国产精品男人爽免费视频1| 国产精品久久久久久超碰| 久久久久国产精品www | 日韩亚洲欧美综合| 欧美电影免费观看网站 | 一区二区三区国产精品| 亚洲欧洲一区二区在线观看| 欧美激情视频在线播放| 亚洲国产精品国自产拍av秋霞 | 中文精品99久久国产香蕉| 亚洲永久精品国产| 亚洲最新在线| 欧美凹凸一区二区三区视频| 牛牛影视久久网| 欧美大成色www永久网站婷| 久久性色av| 亚洲第一成人在线| 日韩亚洲在线| 亚洲欧美视频在线观看视频| 亚洲综合欧美| 老色鬼久久亚洲一区二区| 欧美色偷偷大香| 国产一区二区三区四区hd| 99亚洲视频| 欧美一区三区二区在线观看| 久久视频在线视频| 中文在线资源观看网站视频免费不卡 | 99国产一区二区三精品乱码| 小黄鸭精品aⅴ导航网站入口| 欧美xxx成人| 国产精品网站视频| 性欧美1819性猛交| av成人老司机| 欧美日韩国产美女| 99精品99| 久色成人在线| 亚洲一区二区三| 免费欧美视频| 一个色综合av| 欧美激情中文不卡| 久久久无码精品亚洲日韩按摩| 国产精品欧美日韩一区| 日韩视频中文| 亚洲欧美在线一区| 激情自拍一区| 久久久噜噜噜久久久| 猛干欧美女孩| 激情久久影院| 欧美成人中文字幕| 欧美日韩视频一区二区| 一区二区日韩欧美| 亚洲欧美视频在线| 亚洲精品无人区| 欧美中在线观看| 最新国产拍偷乱拍精品| 中文在线一区| 91久久精品美女| 午夜电影亚洲| 亚洲一区二区三区免费视频| 夜夜嗨av一区二区三区中文字幕| 国产精品麻豆成人av电影艾秋| 久久久久久91香蕉国产| 欧美激情视频网站| 性高湖久久久久久久久| 另类酷文…触手系列精品集v1小说| 亚洲国产精品专区久久| 一区二区三区四区国产| 伊人精品成人久久综合软件| 亚洲欧美国产日韩中文字幕| 国内精品视频在线观看| 亚洲作爱视频|