為RPC而生的t-io企業叢集版的msg伺服器tio-msg-demo你應該感興趣
概念解釋
什麼是 RPC(Remote Procedure Call) 遠端過程呼叫 ,是一種透過網路從 遠端計算機程式上請求服務 ,實現某個業務,但是不需要具體瞭解底層網路技術的協議。 t-io把程式中對外實現通訊的各個協議模組進行了打包處理成一個盒子,上層應用對外通訊就只要對接盒子的介面,而不必關心盒子裡面的內容,RPC服務要對外實現遠端呼叫,首先要跟t-io通訊,再到遠方的服務。
為什麼要使用RPC呢?如果一個系統(例如,網站、大型應用等)中內部子系統較多、介面也非常多的情況下,採用RPC的好處就很明顯了,RPC中採用的長連結,不必每次通訊都要像有些協議一樣每次都要進行3次握手來建立連線,例如,HTTP協議,這樣就能減少了網路開銷;其次,就是RPC中一般都有註冊中心,而且有豐富的監控管理模組;應用方要進行釋出、捆綁下線介面、動態擴充套件等,對呼叫方來說可以是無感知、歸一化的操作。而且RPC的安全性也很好。
可見RPC下面如果有一個非常高效的網路程式設計框架配合,使用起來會很方便,由於t-io中內建了 socket、NIO功能,所以跟RPC對接具有天然的優勢,當然也可以使用netty,但是netty的使用起來比t-io會複雜很多。
基於 t-io 開發的最成功即時通訊軟體 — 譚聊,已經完好的實現 RPC 的功能,具體請參考:
https://www.tiocloud.com/1/blog/1385967412607852544?type=screen-category
msg 伺服器介紹
企業叢集版的 t-io,已經實現了msg伺服器。自從有了叢集伺服器後,做rpc, 做msg都是很容易的事了!對於有RPC業務需求的老鐵又是一大福音。我 們 自己開發的 IM聊天工具 — 譚聊中已經驗證的非常完美了。 廢話不多說,請看具體實現程式碼。
示範程式碼
DemoMessage.java
package org.tio.msg.demo; import org.tio.msg.common.bs.msg.Message; public class DemoMessage extends Message { private static final long serialVersionUID = -985195945448439158L; private String name = "hello tio message"; public String getName() { return name; } public void setName(String name) { this.name = name; } }
DemoMessageListener.java
package org.tio.msg.demo; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.tio.msg.common.bs.msg.MessageListener; import org.tio.utils.json.Json; public class DemoMessageListener implements MessageListener<DemoMessage> { private static Logger log = LoggerFactory.getLogger(DemoMessageListener.class); public static final DemoMessageListener me = new DemoMessageListener(); @Override public void onMessage(String fromCid, DemoMessage message) { log.warn("收到Tio Message, fromCid[{}], Message:\r\n{}", fromCid, Json.toFormatedJson(message)); } }
啟動類TioMsgDemoStarter.java
package org.tio.msg.demo; import java.sql.SQLException; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.tio.core.Node; import org.tio.msg.client.MsgClientStarter; import org.tio.msg.client.MsgApi; import org.tio.msg.common.utils.JsonInit; import org.tio.msg.common.utils.PropInit; import org.tio.utils.jfinal.P; /** * @author tanyaowu */ public class TioMsgDemoStarter { private static Logger log = LoggerFactory.getLogger(TioMsgDemoStarter.class); public static MsgClientStarter cluClientStarter = null; /** * 基本的初始化,一般用於單元小測試 * @throws SQLException */ public static void initBase() throws SQLException { PropInit.init(new String[] { "app.properties" }); JsonInit.init(); } /** * @param args * @author tanyaowu */ public static void main(String[] args) { try { initBase(); //啟動tio cluster client Node cluServerNode = new Node(P.get("tio.clu.server.ip"), P.getInt("tio.clu.server.port")); cluClientStarter = new MsgClientStarter(false, null, cluServerNode, null); cluClientStarter.start(); Thread.sleep(100L);//sleep一下,讓各連線的握手完成,實際專案中,一般不需要這樣 //新增listener MsgApi.addListener(cluClientStarter.getClientTioConfig(), DemoMessage.class, DemoMessageListener.me); for (int i =0; i < 1000; i++) { //釋出一個demo 訊息 DemoMessage demoMessage = new DemoMessage(); demoMessage.setName("hello tio message " + i); MsgApi.publish(cluClientStarter.getClientTioConfig(), demoMessage, true); } } catch (Throwable e) { log.error("", e); System.exit(1); } } }
執行
04-24 22:27:01 INFO o.t.c.client.PacketDispatcher[102] server:127.0.0.1:1982, client:0:0:0:0:0:0:0:0:13378 收到訊息:MessageNtf 04-24 22:27:01 WARN o.t.m.demo.DemoMessageListener[20] 收到Tio Message, fromCid[1385963494888697856], Message: { "name":"hello tio message" }
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70006579/viewspace-2848150/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- HTTP總有你感興趣的HTTP
- 興趣愛好——IOS興趣感的磨練iOS
- 為你的舊智慧手機再續命10年,你感興趣嗎?
- 其他感興趣的程式碼庫
- 你應該知道的 RPC 原理RPC
- 對WebUI技術感興趣的說 (轉)WebUI
- 給對linux感興趣的初學者的文章Linux
- 給對linux感興趣的初學者的文章 (轉)Linux
- Appcelerator:37%的開發者對WP平臺感興趣APP
- 你應該知道的程式集版本
- matlab感興趣區域處理Matlab
- 大家對 Laravel 的原始碼和架構感興趣麼?Laravel原始碼架構
- 為資料集而生的 SQL 控制檯SQL
- 從0到1搭建spark叢集---企業叢集搭建Spark
- Win10開啟小娜提示無法獲取你感興趣的資訊的解決方法Win10
- 一旦感興趣,早晚都要入坑的Linux系統!Linux
- 谷歌:報告指出只有16%的手遊玩家對NFT遊戲感興趣谷歌遊戲
- Sequence:只有23%的視訊遊戲玩家對VR裝置感興趣遊戲VR
- 漢化輔助軟體---有誰感興趣? (38字)
- 企業應該如何選擇大頻寬伺服器伺服器
- 你的初創企業究竟應該用哪種開源協議?協議
- 一個遊戲系統,向Banq大哥,以及感興趣的朋友請教!遊戲
- Tea,為 hacker 而生的筆記應用筆記
- 你的資料是如何洩露的?企業和個人應該這樣做……
- 為什麼說,整個SaaS行業都應該感謝“寒冬”?行業
- 初創企業CEO:這幾項工作你應該外包!
- 不用程式碼趣講 ZooKeeper 叢集
- 邦芒簡歷:HR對哪些工作經驗感興趣?
- Bizrate:只有28%的消費者對使用智慧音響購物感興趣
- Interpret:56%的NFT和加密遊戲玩家對賺取NFT感興趣加密遊戲
- 聽說大家很感興趣瑋子的學習心得,採訪來了
- RPA正在成為企業應用標配,企業應該如何進行自動化?
- 企業的資料分析應該如何做
- 叢集RPC通訊怎麼做RPC
- 怎樣將win10企業版轉換為專業版_win10企業版升級為專業版的方法Win10
- 沃趣微講堂 | Oracle叢集技術(三):被誤傳的叢集自啟動Oracle
- Ipsos MORI:只有15%的歐洲玩家對Google Stadia或Project xCloud感興趣GoProjectCloud
- GDC:近30%的遊戲工作室對NFT和加密貨幣感興趣遊戲加密