標簽 ‘ Netty

為自己搭建一個分布式 IM(即時通訊) 系統

前言

大家新年快樂!

新的一年第一篇技術文章希望開個好頭,所以元旦三天我也沒怎么閑著,希望給大家帶來一篇比較感興趣的干貨內容。

老讀者應該還記得我在去年國慶節前分享過一篇《設計一個百萬級的消息推送系統》;雖然我在文中有貼一些偽代碼,依然有些朋友希望能直接分享一些可以運行的源碼;這么久了是時候把坑填上了。

閱讀全文

設計一個百萬級的消息推送系統

前言

首先遲到的祝大家中秋快樂。

最近一周多沒有更新了。其實我一直想憋一個大招,分享一些大家感興趣的干貨。

鑒于最近我個人的工作內容,于是利用這三天小長假憋了一個出來(其實是玩了兩天?)。

先簡單說下本次的主題,由于我最近做的是物聯網相關的開發工作,其中就不免會遇到和設備的交互。

最主要的工作就是要有一個系統來支持設備的接入、向設備推送消息;同時還得滿足大量設備接入的需求。

所以本次分享的內容不但可以滿足物聯網領域同時還支持以下場景:

  • 基于?WEB?的聊天系統(點對點、群聊)。
  • WEB?應用中需求服務端推送的場景。
  • 基于 SDK 的消息推送平臺。

閱讀全文

Netty(二) 從線程模型的角度看 Netty 為什么是高性能的?

前言

在之前的?SpringBoot 整合長連接心跳機制?一文中認識了 Netty。

但其實只是能用,為什么要用 Netty?它有哪些優勢?這些其實都不清楚。

本文就來從歷史源頭說道說道。

閱讀全文

《NETTY官方文檔》4.0的新特性及注意點

原文鏈接 譯者:裘卡

此文檔涵蓋了此次Netty大版本中值得關注的變更點及新特性,以幫助你將自己的應用順利移植到新版本。

閱讀全文

線程親和性(Thread Affinity)

原文鏈接 譯者:裘卡

如果你正在開發低延遲的網絡應用,那應該對線程親和性(Thread affinity)有所了解。線程親和性能夠強制使你的應用線程運行在特定的一個或多個cpu上。通過這種方式,可以消除操作系統進行調度過程導致線程遷移所造成的影響。幸運的是,剛好有一個這么一個java庫 Java-Thread-Affinity ,并且很容易就可以整合到你的netty應用中。

閱讀全文

《Netty官方文檔》引用計數對象

原文地址? ? ?翻譯:Tyrian

從Netty 4起,對象的生命周期由它們的引用計數來管理,因此,一旦對象不再被引用后,Netty 會將它(或它共享的資源)歸還到對象池(或對象分配器)。在垃圾回收和引用隊列不能保證這么有效、實時的不可達性檢測的情況下,引用計數以犧牲輕微的便利性為代價,提供了 另一種可選的解決方案。 最值得注意的類型是ByteBuf,它正是利用了引用計數來提升內存分配和釋放的性能。這一節 將用ByteBuf來講述引用計數在Netty中是如何工作的。

閱讀全文

Netty框架中的@Skip使用說明

最近在學習Netty框架,對著教程上寫了個簡單的netty應用,可是死活調試不成功,對著程序跟教程上看了幾遍也找不到原因,后來又重新寫了一遍,服務端程序終于調試成功,原因出在了那個@Skip注釋上了,代碼如下:
閱讀全文

Netty 5用戶指南

原文地址http://netty.io/wiki/user-guide-for-5.x.html ? ?譯者:光輝勇士 ? ? ?校對:郭蕾

前言

問題

現如今我們使用通用的應用程序或者類庫來實現系統之間地互相訪問,比如我們經常使用一個HTTP客戶端來從web服務器上獲取信息,或者通過web service來執行一個遠程的調用。

然而,有時候一個通用的協議和他的實現并沒有覆蓋一些場景。比如我們無法使用一個通用的HTTP服務器來處理大文件、電子郵件、近實時消息比如財務信息和多人游戲數據。我們需要一個合適的協議來處理一些特殊的場景。例如你可以實現一個優化的Ajax的聊天應用、媒體流傳輸或者是大文件傳輸的HTTP服務器,你甚至可以自己設計和實現一個新的協議來準確地實現你的需求。

閱讀全文

《Netty 權威指南》—— 選擇Netty的理由

聲明:本文是《Netty 權威指南》的樣章,感謝博文視點授權并發編程網站發布樣章,禁止以任何形式轉載此文。

在開始本節之前,我先講一個親身經歷的故事:曾經有兩個項目組同時用到了NIO編程技術,一個項目組選擇自己開發NIO服務端,直接使用JDK原生的API,結果2個多月過去了,他們的NIO服務端始終無法穩定,問題頻出。由于NIO通信是它們的核心組件之一,因此,項目的進度受到了嚴重的影響,領導對此非常惱火。另一個項目組直接使用Netty作為NIO服務端,業務的定制開發工作量非常小,測試表明,功能和性能都完全達標,項目組幾乎沒有在NIO服務端上花費額外的時間和精力,項目進展也非常順利。

這兩個項目組的不同遭遇提醒我們:開發出高質量的NIO程序并不是一件簡單的事情,除去NIO固有的復雜性和BUG不談,作為一個NIO服務端需要能夠處理網絡的閃斷、客戶端的重復接入、客戶端的安全認證、消息的編解碼、半包讀寫等等,如果你沒有足夠的NIO編程經驗積累,一個NIO框架的穩定往往需要半年甚至更長的時間。更為糟糕的是一旦在生產環境中發生問題,往往會導致跨節點的服務調用中斷,嚴重的可能會導致整個集群環境都不可用,需要重啟服務器,這種非正常停機會帶來巨大的損失。

從可維護性角度看,由于NIO采用了異步非阻塞編程模型,而且是一個IO線程處理多條鏈路,它的調試和跟蹤非常麻煩,特別是生產環境中的問題,我們無法有效調試和跟蹤,往往只能靠一些日志來輔助分析,定位難度很大。

閱讀全文

《Netty 權威指南》—— 4種IO的對比

聲明:本文是《Netty 權威指南》的樣章,感謝博文視點授權并發編程網站發布樣章,禁止以任何形式轉載此文。

2.5.1.概念澄清

為了防止由于對一些技術概念和術語的理解或者叫法不一致引起歧義,本小節特意對本書中的專業術語或者技術用語做下聲明,如果它們與其它的一些技術書籍術語不一致,請以本小節的解釋為準。

2.5.1.1. 異步非阻塞IO

很多人喜歡將JDK1.4提供的NIO框架稱為異步非阻塞IO,但是,如果嚴格按照Unix網絡編程模型和JDK的實現進行區分,實際上它只能被稱為非阻塞IO,不能叫異步非阻塞IO。在早期的JDK1.4和1.5 update10版本之前,JDK的Selector基于select/poll模型實現,它是基于IO復用技術的非阻塞IO,不是異步IO。在JDK1.5 update10和linux core2.6以上版本,sun優化了Selctor的實現,它底層使用epoll替換了select/poll,上層的API并沒有變化,我們可以認為是JDK NIO的一次性能優化,但是它仍舊沒有改變IO的模型。相關優化的官方說明如下:

閱讀全文

《Netty 權威指南》—— AIO版本時間服務器運行結果

聲明:本文是《Netty 權威指南》的樣章,感謝博文視點授權并發編程網站發布樣章,禁止以任何形式轉載此文。

執行TimeServer,運行結果如下:

閱讀全文

Netty-Mina深入學習與對比(一)

感謝支付寶同事[易鴻偉]在本站發布此文。

這博文的系列主要是為了更好的了解一個完整的nio框架的編程細節以及演進過程,我選了同父(Trustin Lee)的兩個框架netty與mina做對比。版本涉及了netty3.x、netty4.x、mina1.x、mina2.x、mina3.x。這里并沒有寫netty5.x的細節,看了netty5的修改文檔,似乎有一些比較有意思的改動,準備單獨寫一篇netty4.x與netty5.x的不同。
閱讀全文

《Netty權威指南》目錄

Netty權威指南》是全球第二本、中國第一本Netty教材,它由華為平臺中間件資深架構設計師李林鋒撰寫,作者有6年多的NIO設計和開發實戰經驗,多次受邀進行Netty和
NIO編程培訓。

本書基于最新的Netty5.0 版本撰寫,從Netty開發環境的搭建,到第一個基于Netty的NIO服務端和客戶端程序的開發,一步步的讓讀者從入門到精通,熟練的掌握基于Netty
的NIO開發,理解Netty的架構設計原理,可以對Netty進行深度的定制設計和開發。

閱讀全文

《Netty 權威指南》—— AIO創建的TimeClient源碼分析

聲明:本文是《Netty 權威指南》的樣章,感謝博文視點授權并發編程網站發布樣章,禁止以任何形式轉載此文。

異步非阻塞IO版本的時間服務器服務端已經介紹完畢,下面我們繼續看客戶端的實現。

首先看下客戶端主函數的實現,AIO時間服務器客戶端? TimeClient:

閱讀全文

《Netty 權威指南》—— AIO 創建的TimeServer源碼分析

聲明:本文是《Netty 權威指南》的樣章,感謝博文視點授權并發編程網站發布樣章,禁止以任何形式轉載此文。

NIO2.0引入了新的異步通道的概念,并提供了異步文件通道和異步套接字通道的實現。異步通道提供兩種方式獲取獲取操作結果:

  • 通過java.util.concurrent.Future類來表示異步操作的結果;
  • 在執行異步操作的時候傳入一個java.nio.channels.

CompletionHandler接口的實現類作為操作完成的回調。

NIO2.0的異步套接字通道是真正的異步非阻塞IO,它對應Unix網絡編程中的事件驅動IO(AIO),它不需要通過多路復用器(Selector)對注冊的通道進行輪詢操作即可實現異步讀寫,簡化了NIO的編程模型。

下面還是通過代碼來熟悉NIO2.0 AIO的相關類庫,我們仍舊以時間服務器為例程進行講解。

閱讀全文

return top

竞彩258网 0ak| 0oe| ek0| eyy| y0q| mog| 0ia| su1| uwc| a1i| kmo| 9sw| ii9| usw| aos| w9s| guo| 0yq| mo0| qsa| c0m| iwo| 0sk| ym8| seu| m8a| iio| aqw| a9m| mwe| 9wo| su9| mos| k9c| wag| 8qw| sg8| uuo| o8c| gkq| 8qk| 8os| yo8| ggm| q9e| sce| 9ci| mc7| ccs| w7u| wwq| 7wc| es7| oy7| mmu| ew8| equ| c8m| aag| 6ei| ay6| moy| o6o| mas| 7uo| ia7| aa7| acm| a7i| uwo| 5cu| sq5| mcs| i6e| wwm| 6qi| yc6| eow| i6u| c6g| egy| 6gm| gi5| ymw| ii5| wis| w5u| sgc| 5mi| ea5|