游戲服務器架構-設計模式之發布訂閱模式

發布訂閱模式場景

熟悉消息中間件的同學應該對發布/訂閱模式(Publish Subscribe Pattern)并不陌生。即使你不了解消息中間件,那么在平時生活中發布/訂閱模式也是非常常見的場景。

比如你打開你的微信訂閱號,你訂閱的作者發布的文章,會廣播給每個訂閱者。在這個場景里,微信公眾號就是一個Pulisher,而你就是一個Subscriber,你收到的文章就是一個Message。

下面我們就一起了解一下發布/訂閱模式發布訂閱模式是最常用的一種觀察者模式的實現,并且從解耦和重用角度來看,更優于典型的觀察者模式。

認識發布訂閱模式

你覺得發布訂閱模式里的Publisher,就是觀察者模式里的Subject,而Subscriber,就是Observer。Publisher變化時,就主動去通知Subscriber?

其實并不是。在發布訂閱模式里,發布者,并不會直接通知訂閱者,換句話說,發布者和訂閱者,彼此互不相識。

互不相識?那他們之間如何交流?

答案是,通過第三者,也就是在消息隊列里面,我們常說的經紀人Broker。

在觀察者模式中,觀察者需要直接訂閱目標事件;在目標發出內容改變的事件后,直接接收事件并作出響應

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/444259.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/444259.shtml
英文地址,請注明出處:http://en.pswp.cn/news/444259.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

leetcode129. 求根到葉子節點數字之和

給定一個二叉樹,它的每個結點都存放一個 0-9 的數字,每條從根到葉子節點的路徑都代表一個數字。 例如,從根到葉子節點路徑 1->2->3 代表數字 123。 計算從根到葉子節點生成的所有數字之和。 說明: 葉子節點是指沒有子節點的節點。 …

游戲服務器架構-設計模式之觀察者模式和發布訂閱模式真的一樣嗎?

前面我給大家分享了觀察者模式和發布訂閱模式,有人私信給我說這倆不是一樣嘛,大體沒什么區別,我猜測大多數認為這兩者是一樣的可以繼續閱讀這兩篇文章,如果還不能解答你的問題,我相信這篇文章對比兩者的關系會讓你有更深刻的認識。 游戲服務器架構-設計模式之觀察者模式 游…

Struts2中s:iterator/s:iterator標簽的使用:

問題是這樣的&#xff1a; <s:iterator value"zhangjieList"> <s:property value"bb"/> </s:iterator> 我在頁面迭代了list里邊的值&#xff0c;我想限定只顯示100個字怎么做&#xff1f; 解決方案&#xff1a; <s:property valu…

聊一下CPU占用高的解決方案

前言: 在軟件開發和性能測試中,CPU占用率是服務器開發一個很重要的指標,到底有哪些因素會導致CPU占 用率上升呢?又有哪些手段可以降低CPU的占用率呢? 如果你看了這篇文章后仍然沒有解決項目問題的思路,請在下方留言或公眾號后臺留言。(后續我將更新一到兩篇…

一文搞懂 什么是CPU上下文?為什么要切換?如何減少切換?

自從上篇文章聊一下CPU占用高的解決方案更新后,最近收到了一些熱心觀眾的后臺留言,問到的一些問題比較集中的是關于CPU切換. 實際用C/C++,go開發,你會特別注意內存和CPU的使用情況,那些對于CPU使用情況特別關注,或者性能特別關注的朋友可以看看這篇文章,相信看完結尾的示…

leetcode257. 二叉樹的所有路徑

給定一個二叉樹&#xff0c;返回所有從根節點到葉子節點的路徑。 說明: 葉子節點是指沒有子節點的節點。 示例: 輸入: 1 / \ 2 3 \ 5 輸出: ["1->2->5", "1->3"] 解釋: 所有根節點到葉子節點的路徑為: 1->2->5, 1->3 思…

內存優化-如何使用tcmalloc來提升內存性能?提升的結果太不可思議

無論是在游戲開發,或者其他長期運行的服務開發中,對內存的使用一直是架構師或者主程序在最初就要關注的point,如果內存使用不當,頻繁申請釋放內存造成系統負擔過大,性能降低,到最后產生大量內存碎片,無法申請可利用內存,最終宕機,給廣大程序員同學造成長期加班的痛苦。…

內存優化-使用tcmalloc分析解決內存泄漏和內存暴漲問題

其實我一直很想寫關于tcmalloc的內存泄漏檢測的文章,只是一直記不起來該如何下筆,有時項目太忙,在整理這方便的思考過少,另外遇到的問題也不是很多,直到最近用tcmalloc幫A項目排查一些很棘手的內存泄漏問題,有了一定的創作靈感,這才執筆創作,希望能分享給大家。 如果對…

leetcode130. 被圍繞的區域

給定一個二維的矩陣&#xff0c;包含 X 和 O&#xff08;字母 O&#xff09;。 找到所有被 X 圍繞的區域&#xff0c;并將這些區域里所有的 O 用 X 填充。 示例: X X X X X O O X X X O X X O X X 運行你的函數后&#xff0c;矩陣變為&#xff1a; X X X X X X X X X X X X…

閑話目前游戲服務器的開發

我是從12年開始進入頁游行業&#xff0c;接觸到的第一個游戲項目就是淘米網的《摩爾莊園》&#xff0c;公司那個時候也剛在美紐交所上市&#xff0c;被Benson&#xff0c;魏震和Rock騰訊三巨頭的感染下&#xff0c;做著喜歡的游戲... &#xff08;后來在工作中我經常會遇到過不…

為什么我們仍然堅持用C++做游戲服務器

本篇文章純屬文字,不需要配圖。 首先以我個人觀點來說,C ++對于我的吸引力不僅僅是它的技術優點。c++是個龐大而奇怪的語言,很多新領域會選擇這個語言是因為有性能上的需求,但是又拿不準瓶頸會出在哪里,C++是一個什么地方調優都很方便的語言,內存,CPU,線程優先…

危險!!!也許你的web網站或服務正在悄無聲息地被SQL注入

2010年秋季,聯合國官方網站遭受SQL注入攻擊。 2014年一個叫“TeamDigi7al”的黑客組織攻擊了美國海軍的一個名為“Smart Web Move”的web應用。此次事件直接造成美國海軍數據庫超過22萬服役人員的個人信息被泄露。而事后,美國海軍動用了超過50萬美元來彌補此次的數據泄密事故…

手把手教你使用sql注入來繞過游戲后臺檢測

SQL注入毫無疑問是最危險的Web漏洞之一,因為我們將所有信息都存儲在數據庫中。其解決方案之一,有許多公司實施Web應用程序防火墻和入侵檢測/預防系統來試圖保護自己。但不幸的是,這些對策往往是不充分的,并且很容易被繞過。 盡管不能依賴防火墻來防止所有SQL注入,但一些防…

JSON是什么?如何產生的?

JSON&#xff1a;是一種輕量級的數據交換方式&#xff0c;它是基于javascript的一個子集。JSON采用完全獨立于語言的文本格式&#xff0c;但是也使用了類似于C語言家族的習慣這些特性使JSON成為理想的數據交換語言。易于人閱讀和編寫&#xff0c;同時也易于機器解析和生成。 掌…

設計模式 ---適配器模式

在一些業務場景里,你是否遇到過如下類似的需求: 1、系統需要使用現有的類,而此類的接口不符合系統的需要。 2、想要建立一個可以重復使用的類,用于與一些彼此之間沒有太大關聯的一些類,包括一些可能在將來引進的類一起工作,這些源類不一定有一致的接口。 3、通過接口轉換…

關于游戲排行榜設計開發的一些總結

前言 不管是手游還是端游,貌似都離不開排行榜,沒有排行榜的游戲是沒有靈魂的游戲,因為排行榜可以讓用戶分泌多巴胺,這樣日活才會上來,有了用戶就有錢賺。產品想方設法的讓用戶留存,設計各種排行榜:個人段位排名、個人積分或金幣排名、全球榜單實時排名。如果用戶量少的話…

leetcode6. Z 字形變換

將一個給定字符串根據給定的行數&#xff0c;以從上往下、從左到右進行 Z 字形排列。 比如輸入字符串為 "LEETCODEISHIRING" 行數為 3 時&#xff0c;排列如下&#xff1a; L C I R E T O E S I I G E D H N 之后&#xff0c;你的輸出需要從左往右逐行…

游戲排行榜-跳表實現原理分析

前言 做游戲的一般都有游戲排行榜的需求,要查一下某個uid的積分排名第幾,這里我給大家推薦之前我們使用的一種排序算法,跳表skiplist。 跳表是一個隨機化的數據結構。它允許快速查詢一個有序連續元素的數據鏈表。跳躍列表的平均查找和插入時間復雜度都是O(log n),優于普通隊…

如何使用redis來實現常見的游戲排行榜

前言 前面幾篇文章給大家聊了下目前的常用的排行榜做法。 關于游戲排行榜設計開發的一些總結 游戲排行榜-跳表實現原理分析 那么這篇文章將給大家帶來如何使用redis來實現常見的游戲排行榜功能。 為什么使用redis 如果你已經是redis的高級玩家可以跳過這段介紹。下面這段redis的…

leetcode43. 字符串相乘 經典大數+和*

43. 字符串相乘 難度中等264 給定兩個以字符串形式表示的非負整數 num1 和 num2&#xff0c;返回 num1 和 num2 的乘積&#xff0c;它們的乘積也表示為字符串形式。 示例 1: 輸入: num1 "2", num2 "3" 輸出: "6" 示例 2: 輸入: num1 &q…