應用程式之間的通信傳輸協議

来源:https://www.cnblogs.com/wing011203/archive/2023/03/14/17213535.html
-Advertisement-
Play Games

這篇文章主要描述應用程式之間的通信協議,包括進行數據“斷句”的兩種不同方法,以及在應用協議層面實現高性能的雙工通信。 ...


傳輸協議是應用程式之間對話的語言,涉及傳輸協議,並沒有太多規範和要求,只要通信雙方的應用程式都能正確處理這個協議,沒有歧義就可以了。

數據“斷句”

在數據傳輸的過程中,我們需要處理“斷句”,無論我們定義什麼字元作為分隔符,它都有可能會在傳輸的數據中出現,為了區分“數據內的分隔符”和真正的分隔符,我們需要在發送數據階段,加上分隔符之前,把數據內的分隔符做轉義,收到數據之後再轉義回來。

在實際應用中,更加實用的方法是我們在每句話前面加一個標識這句話長度的數字,收到書時,我們按照長度進行讀取。

這種預置長度的方法很好的解決了“斷句”的問題,並且實現的過程也比分隔符簡單,性能也好。

單工和雙工通信

所謂單工通信,是指在任何一個時刻,數據只能單向傳輸。

HTTP 1協議就是單工協議,客戶端和服務端建立一個連接後,客戶端發送一個請求,直到服務端返迴響應或者請求超時,這段時間內,這個連接通道上是不能再發送其他請求的。這種單工通信的效率比較低,很多瀏覽器和App為瞭解決這個問題,只能同時在服務端和客戶端之間創建很多連接。

所謂雙工通信,是指我們可以同時進行數據的雙向收發,互相不會受到任何影響。

TCP連接是一個全雙工通道,為了提供吞吐量,應用層協議也必須支持雙工通信。

在雙工通信場景下,如何保證數據發送順序呢?或者說如何保證響應和請求的對應關係呢?我們可以在發送請求的時候,給每個請求加一個序號,這個序號在本地會話內保證唯一,然後在響應中帶上請求的序號,通過這種方式,我們可以建立響應和請求的對應關係。

解決斷句問題,實現雙工通信,配合專用的序列化方法,我們可以實現一套高性能的網路通信協議,實現高性能的進程間通信,很多消息隊列、RPC框架都是用這種方式來實現它們自己的私有應用層傳輸協議。

    作者:李潘     出處:http://wing011203.cnblogs.com/     本文版權歸作者和博客園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接,否則保留追究法律責任的權利。
您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 摘要:集群運行過程中,有時候會執行併發量比較高的業務場景,一些資料庫沒有為這種高併發作業配置合適的參數,會導致作業大量報錯,這篇文章讓你玩轉併發作業。 本文分享自華為雲社區《【玩轉PB級數倉GaussDB(DWS)】線上運維 - 高併發導致資源類報錯分析解決》,作者:323老四。 集群運行過程中,有 ...
  • 資料庫的基本概念 資料庫(database)是用來組織、存儲和管理數據的倉庫。對資料庫中的數據可以進行增刪改查操作。市面上常見的資料庫有: MySQL(使用最廣泛。流行度最高的開源免費資料庫 Community+Enterprise) Oracle(收費) SQL Server(收費) Mongod ...
  • 1.新增特性 2.穩定性提升 3.其他調整 4.bug修複 5.GreatSQL VS MySQL社區版 6.GreatSQL Release Notes Changes in GreatSQL 8.0.25-17(2023-3-13) GreatSQL 8.0.25-17 是一個微小改進版本,主要 ...
  • 引言 在實際的業務統計需求中 有時往往需要對區間進行分組統計查詢,如分數區間,工資區間查詢統計等!mysql中可以利用elt函數來實現此類需求! 接下來看如下時間業務需求: 1:現在要進行統計,小於100的,100~500的,500~1000的,1000以上的,這各個區間的id數 mysql> se ...
  • 好家伙,本篇為《JS高級程式設計》第二十六章“模塊”學習筆記 JS開發會遇到代碼量大和廣泛使用第三方庫的問題。 解決這個問題的方案通 常需要把代碼拆分成很多部分,然後再通過某種方式將它們連接起來。 若代碼量較大,我們使用模塊化開發的模式,也能夠使代碼容易維護 我們需要模塊 1.模塊模式 把邏輯分塊, ...
  • 這裡給大家分享我在網上總結出來的一些知識,希望對大家有所幫助 開發過程中 常見的 https 問題 - 避坑 做前端多年,發現有些問題需要重覆解決很多次,浪費了不少時間,https 導致的問題就屬於其中的一種,被不同崗位的同事問過很多次。 這篇關於 https 的科普文,趕緊安利給團隊的相關小伙伴看 ...
  • 在頁面佈局中,元素水平垂直居中的方法有很多,這裡就列舉3個簡單,用的比較多的方法吧。 情況一、已知元素的寬高 1 <style> 2 .center { 3 width: 200px; 4 height: 200px; 5 background-color: #000; 6 /* 1.絕對定位,加m ...
  • 職責鏈模式(Chain of Responsibility pattern)是一種行為設計模式,用於將請求從一個對象傳遞到另一個對象,直到找到能夠處理請求的對象為止。 職責鏈模式通常涉及一系列處理對象,每個對象都負責處理請求的一部分,並將請求傳遞給下一個對象,直到請求得到滿足或者處理結束。這種方式可 ...
一周排行
    -Advertisement-
    Play Games
  • 概述:本文代碼示例演示瞭如何在WPF中使用LiveCharts庫創建動態條形圖。通過創建數據模型、ViewModel和在XAML中使用`CartesianChart`控制項,你可以輕鬆實現圖表的數據綁定和動態更新。我將通過清晰的步驟指南包括詳細的中文註釋,幫助你快速理解並應用這一功能。 先上效果: 在 ...
  • openGauss(GaussDB ) openGauss是一款全面友好開放,攜手伙伴共同打造的企業級開源關係型資料庫。openGauss採用木蘭寬鬆許可證v2發行,提供面向多核架構的極致性能、全鏈路的業務、數據安全、基於AI的調優和高效運維的能力。openGauss深度融合華為在資料庫領域多年的研 ...
  • openGauss(GaussDB ) openGauss是一款全面友好開放,攜手伙伴共同打造的企業級開源關係型資料庫。openGauss採用木蘭寬鬆許可證v2發行,提供面向多核架構的極致性能、全鏈路的業務、數據安全、基於AI的調優和高效運維的能力。openGauss深度融合華為在資料庫領域多年的研 ...
  • 概述:本示例演示了在WPF應用程式中實現多語言支持的詳細步驟。通過資源字典和數據綁定,以及使用語言管理器類,應用程式能夠在運行時動態切換語言。這種方法使得多語言支持更加靈活,便於維護,同時提供清晰的代碼結構。 在WPF中實現多語言的一種常見方法是使用資源字典和數據綁定。以下是一個詳細的步驟和示例源代 ...
  • 描述(做一個簡單的記錄): 事件(event)的本質是一個委托;(聲明一個事件: public event TestDelegate eventTest;) 委托(delegate)可以理解為一個符合某種簽名的方法類型;比如:TestDelegate委托的返回數據類型為string,參數為 int和 ...
  • 1、AOT適合場景 Aot適合工具類型的項目使用,優點禁止反編 ,第一次啟動快,業務型項目或者反射多的項目不適合用AOT AOT更新記錄: 實實在在經過實踐的AOT ORM 5.1.4.117 +支持AOT 5.1.4.123 +支持CodeFirst和非同步方法 5.1.4.129-preview1 ...
  • 總說周知,UWP 是運行在沙盒裡面的,所有許可權都有嚴格限制,和沙盒外交互也需要特殊的通道,所以從根本杜絕了 UWP 毒瘤的存在。但是實際上 UWP 只是一個應用模型,本身是沒有什麼許可權管理的,許可權管理全靠 App Container 沙盒控制,如果我們脫離了這個沙盒,UWP 就會放飛自我了。那麼有沒... ...
  • 目錄條款17:讓介面容易被正確使用,不易被誤用(Make interfaces easy to use correctly and hard to use incorrectly)限制類型和值規定能做和不能做的事提供行為一致的介面條款19:設計class猶如設計type(Treat class de ...
  • title: 從零開始:Django項目的創建與配置指南 date: 2024/5/2 18:29:33 updated: 2024/5/2 18:29:33 categories: 後端開發 tags: Django WebDev Python ORM Security Deployment Op ...
  • 1、BOM對象 BOM:Broswer object model,即瀏覽器提供我們開發者在javascript用於操作瀏覽器的對象。 1.1、window對象 視窗方法 // BOM Browser object model 瀏覽器對象模型 // js中最大的一個對象.整個瀏覽器視窗出現的所有東西都 ...