導航:首頁 > 編程語言 > fastjson優點

fastjson優點

發布時間:2024-05-18 19:05:44

㈠ 即時通訊IM系統開發

我於2014年開啟即時通訊的開發之路,歷經從服務端到客戶端,從第三方到自研,經歷過諸多的研發難題,都一一破解。現將經驗總結如下,希望對行業內從事IM開發的程序員有所幫助。

①P2P方式

P2P方式多用於區域網內聊天,這種方式在有種種限制和不便。一方面它只適合在線的點對點消息傳輸,對離線,群組等支持不夠。另一方面由於 NAT 的存在,使得不同區域網內機器互聯難度大大上升,在某些網路類型(對稱NAT)下無法建立連接。使用P2P方式的軟體在啟動後一般做兩件事情:

1、進行UDP廣播:發送自己信息和接受同區域網內其他端信息。

2、開啟TCP監聽:等待其他端進行連接。

②伺服器中轉方式

大部分的互聯網IM產品都採用伺服器中轉這種方式進行消息傳輸,相對於P2P的方式,具有有以下的優點:

1、支持更多P2P無法支持或支持不好的業務,如離線消息,群組,聊天室。

2、方便業務邏輯的拓展和新舊版本的兼容,當然它也有自己的問題,就是伺服器架構復雜,並發要求高。

通過以上的比較,建議我們在開發IM系統的時候使用伺服器中轉的方式。


IM的網路連接方式有基於TCP的長連接和基於HTTP短連接兩種:

①基於TCP的長連接

基於TCP長連接則能夠更好地支持大批量用戶,問題是客戶端和伺服器的實現比較復雜。也有一些改進,比如下行使用MQTT進行伺服器通知/消息的下發,上行使用HTTP短連接進行指令和消息的上傳。這種方式能夠保證下行消息/指令的及時性,但是在弱網路下上行慢的問題還是比較嚴重,早期的來往就是基於這種方式。

②基於HTTP短連接

常見於WEB IM系統(現在很多WEBIM都是基於WebSocket實現),它的優點是實現簡單,方便開發上手,問題是流量大,伺服器負載較大,消息及時性無法很好地保證,對大規模的用戶量支持不夠,適合小型的IM系統。

IM常見的協議有:XMPP,MQTT,私有協議。各種協議優缺點情況如下:

①XMPP協議

優點:協議開源,可拓展性強,在各個端(有各種語言的實現,對於前期入門級的開發者是很好的選擇,方便進入IM開發的程序員快速上手。

缺點:XML表現力弱,有太多冗餘信息,流量大。

常見案例:Gtalk、新浪微博、Facebook。

②MQTT協議

優點:協議簡單,流量少。

缺點:不是一個專門為IM設計的協議,多使用於推送。

③私有協議

幾乎所有主流的IM APP都是使用私有協議。

優點:高效,節約流量(一般使用二進制協議),安全性高,難以破解。

缺點:開發初期沒有現有樣列可以參考,對於參與IM開發的程序員的要求比較高。

常見案例:微信、釘釘。

根據以上的對比,我們得出結果,一個好的協議需要滿足高效、簡潔、節約流量、易於拓展等要求,同時又能夠和當前的開發團隊的技術堆棧匹配,不能選擇一個他們很難上手的。

這里再提一下,我當時開發IM系統的時候,上手用的是XMPP,在使用的過程中發現了很多問題,踩了很多坑。

①實時性原則

消息實時到達接收方,如果用戶在線,則消息實時到達,如果用戶不在線,則消息在用戶登錄後到達。由於網路波動,以及移動端操作系統對應用前後台切換的管理,如何實現用戶連接管理、消息實時推送,推送失敗的處理方式,客戶端重連機制,消息如何補齊等,都需要IM系統考慮。由於TCP開發略微復雜,早期的基於HTTP短輪詢、長輪詢的低效的技術方案,也無法達到實時性的要求。

②可靠性原則

是指我們經常聽到的「消息送達」,通常用消息的不丟失和不重復兩個技術指標來表示。可靠性是要確保消息被發送後,能夠被接收者收到。由於網路環境的復雜性,以及用戶在線的不確定性,消息的可靠性(不丟失、不重復)是IM系統的核心指標,也是IM系統實現中的難點之一。總體來說,IM系統的消息「可靠性」,通常就是指聊天消息投遞的可靠性(准確的說,這個「消息」是廣義的,因為還存用戶看不見的各種指令和通知,包括但不限於進群退群通知、好友添加通知等,為了方便描述,統稱「消息」)。

從消息發送者和接收者用戶行為來講,消息「可靠性」應該分為以下幾種情況:

1、發送失敗:對於這種情況要感知到,明確反饋給發送方。如果此消息沒有發送成功,發送方可以選擇重試或者稍後再試。

2、發送成功:如果接收方處在「在線」狀態,應該立即收到此消息。如果接收方處在「離線」狀態不能收到消息,一旦上線則立刻收到消息。

3、消息不能重復:簡言之就是發送的一條消息不能被重復收到多次。

③一致性原則

系統中要重視消息的時序問題,不能出現發送的消息順序顛倒的問題。通常出現時序的問題有以下的原因:

1、網路傳輸延遲導致時序不一致。不同用戶發送的消息到達伺服器的延時差異較大,給消息時序性帶來挑戰。早期開發過程中經常會遇到這種問題。

2、分布式系統的出現導致時序不一致。IM系統模塊眾多,接入層、消息邏輯層等、每層都分布式集群化,這些應用分布在不同的機器上,如何保證時序是個難點。

④擴展性原則

擴展性是IM系統後期要考慮的問題,包括功能的擴展,伺服器的擴展等,這次就先不展開闡述。

Mina和Netty都是java領域高性能和高可伸縮性網路應用程序的網路應用框架。

Mina是 Apache 組織的項目,它為開發高性能和高可用性的網路 應用程序提供的框架。當前的Mina版本支持基於 Java NIO 技術的 TCP/UDP 應用程序開發、串口通訊程序。目前正在使用 Mina的 軟體有:Apache Directory Project、AsyncWeb、AMQP(Advanced Message Queuing Protocol)、RED5 Server(Macromedia Flash Media RTMP)、ObjectRADIUS、Openfire等。

Netty是由JBOSS提供的一個java開源框架。Netty提供非同步的、 事件驅動的網路應用程序框架和工具,用以快速開發高性能、高可靠性的網路伺服器和客戶端程序。也就是說Netty是一個基於NIO的客戶端和伺服器端框架,使用Netty可以確保你快速和簡單的開發出一個網路應用。

雖然我使用過Mina,但是建議開發選型上使用Netty 。因為Netty有對google protocal buf的支持,有更完整的ioc容器支持(spring,guice,jbossmc和osgi)。Mina更新到2.0就不再更新了,而Netty一直在更新,目前最新發布的版本已經更新到4.1,從版本更新角度可以看出Netty的社區很活躍,修復問題一直在持續,這將對我們選擇它進行開發帶來很多便利。

單體Netty IM系統,可以支持10萬並發,如果機器性能良好的情況下可以超過10萬。

分布式的Netty IM系統,可以支持更高的並發數。各組件的功能如下:

①IM Server 連接器:主要用來負責維持和客戶端的TCP連接。

②緩存:負責用戶、用戶綁定關系、用戶群組關系的緩存。 緩存臨時數據、加快讀速度。可以做成集群方式。

資料庫:用戶、群組、離線消息。可以做成集群方式。

④消息隊列:用戶狀態廣播、群組消息廣播。可以做成集群方式。

開發環境推薦使用netty-4.1.30這個版本,jdk使用1.8及以上版本。如下所示:

io.netty

netty-all

4.1.30.Final

①開發框架採用Netty + Spring(Spring4.x)。

②Spring採用Spring cloud。基於restful 短連接的分布式微服務架構,完成用戶在線管理、單點登錄系統。

③消息隊列採用rocketMQ 高速隊列,整流作用。

④資料庫採用MYSQL。

⑤協議jsON +自定義數據包採用Fastjson。

基於Netty的IM開源代碼在網上有很多,這里就不列舉了,可以自行去git上下載。我認為關鍵是把概念理清楚,技術堆棧選好,總體框架定好,接下來就是開發一個適合中小企業的IM系統了,但是要考慮到後期的擴展性,因為一個好的產品不能自己用,要讓更多的人使用。

㈡ Java中如何在無參構造方法中調用有參構造

一般正常的都是參數多的調用參數少的。有參數的調用無參數的居多。

當然你要無參調用的參的也可以。

你用無參,調用有參的。那你有參的參數你需要怎麼傳呢。當然如果換一個角度也可以。

我手寫下。沒經過IDE的。提供下思路。我有兩種思路,寫同一個功能。

public class Person{

private String name;

private int age;

//無參

public Person(){

this.name="張三";

this.age=20;

}

//有參

public Person(String name){

this.name=name;

}

//多參

public Person(String name,int age){

this(name);//調用一個參數的構造方法

this.age=age;

}

}

這是一種寫法比較常用的方法。寫第一種。用上面的例子直接寫

public Person(){

this("張三",20);//調用有參構造方法。設置默認值。和第一種方法功能一樣

}

public Person(String name,int age){

this.name=name;

this.age=age;

}

為了程序易讀性。一般。參數的擴展和構造方法的調用都是有一定的規律的。

有參調無參,多參調少參。。擴展參數的時候,最好保持原來的順序。

㈢ redis搴忓垪鍖栨柟寮

redis搴忓垪鍖栨柟寮忥細
1.ByteArrayRedisSerializer
Byte鏁扮粍搴忓垪鍖
2.
鍚孎astJsonRedisSerializer綾諱技
3.FastJsonRedisSerializer
1) 鐢遍樋閲屽反宸碏astJson鍖呮彁渚
2) 浼樼偣錛 1錛岄熷害蹇 2. 鍏煎規у己 3. 鍗犵敤鍐呭瓨灝
4.
1) 搴曞眰浣跨敤Jackson榪涜屽簭鍒楀寲騫跺瓨鍏Redis銆傚逛簬鏅閫氱被鍨(濡傛暟鍊肩被鍨嬶紝瀛楃
2) 瀛樺叆瀵硅薄鏃剁敱浜庢病鏈夊瓨鍏ョ被淇℃伅錛屽垯鏃犳硶鍙嶅簭鍒楀寲銆
5.GenericToStringSerializer
鍚孲tringRedisSerializer涓鏍鳳紝浣嗗畠鍙浠ュ皢浠諱綍瀵硅薄娉涘寲涓哄瓧絎︿覆騫跺簭鍒
6.
浼樼偣
1) RedisTemplate榛樿ゅ簭鍒楀寲
2) 閫氱敤鎬у己
3) 鍙嶅簭鍒楀寲鏃朵笉闇瑕佹彁渚涚被鍨嬩俊鎮(class)
緙虹偣
1) 搴忓垪鍖栭熷害鎱
2) 搴忓垪鍖栧崰鐢ㄥ唴瀛樺ぇ
3) 搴忓垪鍖栧硅薄蹇呴』瀹炵幇Serializable鎺ュ彛
4) 鍙璇繪у樊(鏁版嵁瀛樺叆redis鍚庯紝濡傛灉鐩存帴浠庡悗鍙拌誨彇鏁版嵁錛屽彲璇繪т笉鍙嬪ソ)
</br>
7.OxmSerializer
1) 浠xml鏍煎紡瀛樺偍錛堜絾榪樻槸String綾誨瀷鍝︼級錛岃В鏋愯搗鏉ヤ篃姣旇緝澶嶆潅銆
緙虹偣錛
1) 閫熷害鎱
2) 鍗犵敤絀洪棿澶
8.StringRedisSerializer
StringRedisTemplate榛樿ゅ簭鍒楀寲
浼樼偣錛
1) 鍙璇繪у己
2) 涓嶉渶瑕佽漿鎹
緙虹偣錛
1) 鍙鑳藉瑰瓧絎︿覆搴忓垪鍖
2) 涓嶈兘瀵瑰硅薄搴忓垪鍖
9.Jackson2JsonRedisSerializer
1) 浣跨敤Jackson搴撳皢瀵硅薄搴忓垪鍖栦負JSON瀛楃︿覆銆
浼樼偣錛
1) 閫熷害蹇
2) 搴忓垪鍖栧悗鐨勫瓧絎︿覆鐭灝忕簿鎮
3) 涓嶉渶瑕佸疄鐜癝erializable鎺ュ彛
緙虹偣錛
蹇呴』鎻愪緵瑕佸簭鍒楀寲瀵硅薄鐨勭被鍨嬩俊鎮(.class瀵硅薄)
浣跨敤FastJsonRedisSerializer闇瑕佸紩鐢

閱讀全文

與fastjson優點相關的資料

熱點內容
ps文件界面設置 瀏覽:779
c語言12位的數據應該怎麼存儲 瀏覽:953
將ape導入iphone 瀏覽:107
js組合快捷鍵 瀏覽:174
linux系統盤默認掛在的文件夾 瀏覽:667
淘寶數據包如何操作上架 瀏覽:567
vb編程中輸入cls是什麼意思 瀏覽:81
linuxtime服務 瀏覽:184
瘋狂安卓講義第二版代碼 瀏覽:420
老炮兒三小時版本下載 瀏覽:313
matlab怎麼調試程序 瀏覽:2
winxp升級win7的危害 瀏覽:496
網路沒連上卻不可用是怎麼回事 瀏覽:752
社區版本 瀏覽:738
怎麼查微信公眾號什麼時候開通的 瀏覽:717
安裝三菱編程閃退怎麼回事 瀏覽:488
手機怎麼創建word文件格式 瀏覽:694
c語言連接資料庫 瀏覽:887
數據線粉色和白色哪個是正 瀏覽:775
vb編程應注意什麼 瀏覽:855

友情鏈接