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

来源: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
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...