原创 TCP傳輸可靠性-排序、丟棄、重發

一、排序、順序發送、順序組裝 當進行一條數據發送的時候,首先,TCP會將這條數據拆分成不同的片段,然後把片段進行一個排序。然後把排序號的片段順序進行發送。 這樣,保證了傳輸的有序性。   二、丟棄、超時 在整個發送過程中,如果時間片沒有到

原创 簡單內存複用與細節優化

一、內存優化細節 如圖可以看出有內存抖動,解決辦法是內存緩存。 使用內存緩存的時候需要注意的點就是當一個實例不再使用的時候,也應該去釋放這個實例,不能讓這個實例越積累越多,從而導致內存溢出。所以內存溢出的概念就是,當一個實例被創建之後,

原创 混傳數據總結與梳理

一、Connector類 Connector中的SocketChannel是Sender和Receiver的實現類,因此Selector具有接收和發送的功能。 發送時,將SocketChannel封裝成一個StringSendPacket

原创 NIO family 一覽

一、Buffer緩衝區 用戶數據處理的基礎單元,客戶端發送與接收數據都需要通過Buffer轉發進行   二、Channel通道 類似於流;但不同於IN/OUT Stream;流具有獨佔性與單向性;通道則偏向於數據的流通多樣性   三、Se

原创 客戶端數據編碼技術選型

一、語音傳輸流程 要把麥克風錄製的聲音發送到另一個客戶端或者是本機的麥克風上播放,第一步就是錄製最原始的聲音,最原始的聲音就是PCM數據流。這個數據流不能直接進行傳輸,需要先進行壓縮轉碼操作。而壓縮轉碼和我們的數據流之間其實是一個循環操

原创 服務器消息調度邏輯規範化

當消息到達服務端的時候,是給所有客戶端發送消息,沒有一個羣的概念。 應該有一個新建羣,然後加入羣聊。加入羣聊後,發送消息將會通知到羣聊中的所有客戶端。 也可以退出羣聊,退出羣聊後發送的消息將不會被客戶端收到。 二、類說明 Connecto

原创 消息分片設計與實現-發送、接收調度

一、發送調度 1、類圖 2、發送幀   3、取消發送幀   二、接收調度 1、Packet、Frame之間的轉換   2、接收圖解 當發送packet時,發送完packet1的前兩幀,緊接着會發送packet2的第一幀。也就是說

原创 語音即時通信總結

一、  要回答這個問題,從最基本的數據傳輸開始說。將數據從一個麥克風開始傳輸到另一個客戶端上,並且進行播放來說,它的流程是怎樣的呢? 對於客戶端A來說,它首先會將數據投遞到一個SendPacket當中,也就是直流傳輸,然後會把數據解析

原创 多線程調度瓶頸分析

一、多線程調度瓶頸分析 之前加強版的調度流程,在之前的調度流程當中,有一個專屬的Accepter的線程,用來做我們的連接。當有新的連接的時候,將它們添加到連接隊列。在連接隊列中可以分別進行輸入、輸出的selector的線程,這個線程命名

原创 Socket導學

一、爲什麼Socket難 數據粘包、數據丟包、心跳維持、性能問題   二、目的 一套推送框架、IM傳輸原理、勝任物聯網開發職位、協議制定者、理解其他相關庫的底層原理   三、目標與收穫 ByteBuffer               C

原创 消息調度分析

一、客戶端與服務器之間最多建立多少個Socket鏈接? 自己的電腦連接達到成千上萬個的時候就會發生崩潰。 Socket四要素:服務器的地址、服務器的端口、客戶端的地址、客戶端的端口 49152到65535號端口屬於“動態端口”範圍,沒有端

原创 NIO重寫服務器

一、Channel與Buffer Channel可以寫到不同的Buffer 同理,channel也可以從不同的Buffer中讀取數據   二、NIO重寫服務器 監聽客戶端到達 接收、回送客戶端 轉發客戶端數據到另外一個客戶端 多端消息

原创 語音即時通信分析

一、 二、 輸入端可以是屏幕也可以是攝像頭,通過軟件將音頻、視頻轉換爲數據,然後該數據流通過管道傳輸到服務器上面。如果軟件具備一定的服務器功能,也可以直接發送到CDN上面。如果傳輸到服務器的大後臺,還可以在該大後臺上增加一些廣告,用戶

原创 語音數據直流擴展

一、數據傳輸流程 如果想發送數據,先把數據放到Packet中,然後把數據寫入到IoArgs中再進行發送。在這個過程中,packet對應的是一個有限大小的inputstream,會把數據讀取一部分到buffer中,這個過程是由channe

原创 TCP核心API

一、Socket 1.1 Socket() 創建一個Socket 主要用於創建客戶端的連接,客戶端創建的時候會創建一個無連接、無綁定的空狀態Socket 1.2 bind() 綁定一個Socket到一個本地地址和端口上 1.3 co