一個簡單的通訊服務框架(大家發表意見一起研究)JAVA版本

来源:http://www.cnblogs.com/jinyuttt/archive/2017/02/04/6366304.html
-Advertisement-
Play Games

最近研究下java語言,根據一般使用的情況,寫了個連接通訊服務的框架; 框架結構 C-Manager-S; 把所有通訊內容抽取成三個方法介面:GetData,SetData,帶返還的Get; 所有數據都處理為byte[];客戶端與服務端和管理器以及服務端有多重處理模式 管理信息: 1.不需要中心管理 ...


最近研究下java語言,根據一般使用的情況,寫了個連接通訊服務的框架;

框架結構 C-Manager-S;

把所有通訊內容抽取成三個方法介面:GetData,SetData,帶返還的Get;

所有數據都處理為byte[];客戶端與服務端和管理器以及服務端有多重處理模式

管理信息:

1.不需要中心管理器;服務端啟動時向客戶端廣播自己綁定的地址;接收數據;客戶端使用時廣播一次請求,向所有服務端獲取服務信息;

2.管理中心:客戶端向管理器請求服務信息;服務端向管理器註冊地址;根據需要,可以把客戶端傳遞的數據直接轉發給服務,也可以將地址轉發給客戶端,具體哪種由客戶端需要決定

服務端:

1.服務端必須是命名的;整個結構以服務名稱為準;所有請求也以名稱為準;

2.服務端具有相同名稱時;根據服務配置;將服務分為主從模式和負載均衡模式;如果是主從模式,則管理器或者客戶端只調用主服務,當判斷主服務死掉才會啟用從服務;多個從服務時按照產生的序列依次啟用(也會按照時間,其實是參考了zookeeper中的選舉演算法);如果是負載均衡模式(沒有設置服務是主從模式則是負載均衡),負載均衡採用Hash一致演算法,抽取服務使用;

客戶端:

客戶端直接封裝為一個代理介面,又內部轉換,只需要調用介面方法,傳入服務名稱,返回一個代理介面,然後傳送數據

信息緩存:

採用了多個本地資料庫(關係型,非關係型,記憶體資料庫,都是本地化的);

傳輸層:

傳輸層現在只提供了最基本的TCP,UDP;我把通訊層高度抽取,抽取為介面,通過一個通訊管理器來創建介面對象(反射),只需要傳入一個名稱(“TCP”,"UDP")來建立通訊,方便修改,可以很靈活的修改通訊方式,也可以替換熟悉的第三方通訊;大家可以自己開發自己的通訊層,只需要實現介面,給該通訊取一個名稱即可

做了一個簡單的管理器界面如圖:

該框架中有一個序列化組件:magpack;另外就是本地化資料庫

現在網路上的框架組件都比較複雜比較大,比如:zookeeper;其實我們很多都是中小企業或者是小數據運用,沒有必要那麼複雜龐大,也不一定好維護,我只是想弄一個易用,通用,很小,很快的東西,簡化通訊處理,高度抽象;

另外就是所有網路組件都是選擇處理快,簡單的,尤其是免費開源;設計的時候考慮這些組件易更換,儘量不去複雜引用,儘可能抽象介面;

另外準備了一個載入更多的界面:

Java的界面當前不適合複雜開發,只是準備簡單的顯示

已經將代碼提交到了github;

框架功能將逐步更新,可能完善以後也會龐大,基於設計目標,在使用中會儘量模塊化,可以分離使用(比如只使用封裝的資料庫連接池,資料庫操作,通訊層,代理轉換這些);或通過配置,反射,介面分離代碼;

現在主要是JAVA語言實現,其實所有語言都一樣;

最後一點:很多人在部署時害怕中心節點,因為它掛了就一切完蛋。這裡的服務端可以有多種模式;至於管理器,它更加類似DNS解析地址,DNS都掛了,大家都沒有玩的了;不過可以討論有沒有其它方式,我考慮到用多個,內部替換(類似用zookeeper選舉一個中心的中心管理服務,然後切換),有懂通訊或者地址解析的多多提意見;

下一步完善可能添加的技術UDP挖洞;

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 首先給大家拜個晚年,祝大家新春快樂,萬事如意,雞年大吉。 好了,前面我們講了很多的工廠模式,其中,有個很明顯的特點,工廠中,有一個方法,裡面有很多的swich case 分支,我們前面說過,我們可以用反射的技術來避免swich case 分支。ok,那麼,今天,我們來用反射+抽象工廠模式 來完善一下 ...
  • 本文章分為三個部分: web網站發佈、IIS6 安裝方法、ASP.NET v4.0 安裝方法 一、web網站發佈 1.打開 Visual Studio 2013 編譯環境 2.在其解決方案上右擊彈出重新生成解決方案,以查看是否有錯誤 3.如果項目沒有錯誤右擊WebUI層發佈 4.這樣將會看到以下界面 ...
  • Smobiler是一個在VS環境中使用.Net語言來開發APP的開發平臺,也許比Xamarin更方便 ...
  • 百萬行代碼架構遷移——有感 背景 身處互聯網暫不知名公司,16年6月份接受公司項目,主要職責是線上項目問題維護、項目開發SE工作附帶項目組事務管理,目前領隊十來人。由於項目整體研發已有4年,中間團隊人員換了幾波,技術總監和項目架構核心設計人員先後離職,項目前景不容樂觀。 舊項目結構描述 java系項 ...
  • 一、概述 代理模式為另一個對象提供一個替身或占位符以控制對這個對象的訪問。其實就是代理就是做到類似轉發的功能,針對不同代理,轉發的具體實現不同。 二、解決問題 從原理知道他就是控制客戶對一個對象的訪問,它跟現實中的中介代理類似,只是作為代表做一些受理工作,真正執行的並不是它自己。比如買火車票,外面有 ...
  • 1、建造者模式UML 圖1. 建造者模式UML 2、C++實現 C++實現類視圖: 圖2. 建造者模式C++實現的類視圖 其中,Product的實現代碼是(ProductA和ProductB的代碼不再列出): Builder實現代碼是: ConcreteBuilderA的實現代碼是: Concret ...
  • 定義:策略模式定義了演算法族,分別封裝起來,讓他們之間可以相互替換,此模式讓演算法的變化獨立於使用演算法的客戶。 一個使用了策略模式案例的UML類圖:(https://github.com/sunhuace/GOF-23.git) 個人見解:策略模式通過封裝演算法族,使用多態的方式持有FlyBehavevi ...
  • 1、抽象工廠模式UML 圖1. 抽象工廠模式的UML 2、C++實現 C++實現類圖為: 圖2. 抽象工廠模式的C++實現類圖 其中,AbstractFactory的實現代碼為: ConcreteFactoryA的實現代碼為: 其中,ConcreteFactory2的代碼與ConcreteFacto ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...