国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

如何自定義一個協(xié)議

這篇具有很好參考價值的文章主要介紹了如何自定義一個協(xié)議。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

.

如何自定義一個協(xié)議,網(wǎng)絡(luò)協(xié)議

如何自定義一個協(xié)議

先有一個需求,有個場景,打開外賣軟件,會顯示商家列表,列表中有很多項,每一項都包含了一些信息,商家的名稱,圖片,好評率,距離你的位置,評分
這些信息都是通過網(wǎng)絡(luò),從服務(wù)器獲取的,
客戶端,需要給服務(wù)器發(fā)送一個請求,服務(wù)器收到請求之后,就給客戶端返回一個響應(yīng),這里的請求和響應(yīng)該如何創(chuàng)建呢,格式是怎樣的呢?
我們可以做出如下設(shè)計:
1.明確當前請求和響應(yīng)中包含哪些信息
請求:用戶身份,用戶當前位置
響應(yīng):商家的名稱,圖片,好評率,距離你的位置,評分
2.明確具體的請求和響應(yīng)的格式
示例1:
請求:1234,23 100\n
所謂的明確格式就是看你按照什么樣的方式,構(gòu)造出一個字符串,后續(xù)這個字符串就可以作為udp或者tcp的payload進行傳輸,另一方面,服務(wù)器就可以對這個字符串進行分析,解析出逗號前面是用戶身份,逗號后面是用戶當前位置(經(jīng)緯度)
響應(yīng):
老麻抄手,1.jpg,96%,1.3km,4.6\n
這個時候就構(gòu)造出了一個響應(yīng)這樣的字符串,用戶就可以按照這樣的格式來進行解析了
網(wǎng)絡(luò)上,傳輸?shù)臄?shù)據(jù),本質(zhì)上就是字符串,因為無法直接傳輸傳輸一個java對象這樣的內(nèi)容
java寫代碼,都是使用的各種對象,但是最后在發(fā)送數(shù)據(jù)的時候,就需要把對象轉(zhuǎn)換為二進制的字符串(序列化)
而在接收數(shù)據(jù)的時候,也需要把二進制的字符串轉(zhuǎn)換為對象(反序列化)
實際上,上述這樣的約定,可以隨意構(gòu)造,只要保證,客戶端和服務(wù)器遵守同一個約定即可
示例2:
魚香肉絲;1.jpg;96%;2.6km;4.5!
使用!來分割每個商家,使用;來分割商家的每個信息

通用的協(xié)議格式

雖然說,自定義的協(xié)議格式,是可以任意的,但是為了避免出現(xiàn)過于天馬行空的設(shè)計,大佬們就做出了一些通用的協(xié)議格式,參考這些格式,就可以對咱們的協(xié)議設(shè)計產(chǎn)生重要的指導(dǎo)作用

xml

是以成對的標簽,來表示"鍵值對"信息,同時標簽支持嵌套,就可以構(gòu)成一些更為復(fù)雜的樹形結(jié)構(gòu)數(shù)據(jù)
請求:
< request>
< userId>1234< /useId>
< position>100 80< /position>
< /request>
對象的本質(zhì)上也是鍵值對,屬性的名字就是鍵,屬性的值就是值
html是寫網(wǎng)頁的語言,也是帶有標簽的
xml里的標簽都是程序員自定義的,html里的標簽,都是有一套標準規(guī)定好的
響應(yīng):
< response>
< shops>
< shop>
< name>老麻抄手< /name>
< image>1.jpg< /image>
< distance>1km< /distance>
< rate>96%< /rate>
< star>4.7< /star>
< /shop>
< shop>
< name>魚香肉絲< /name>
< image>1.jpg< /image>
< distance>2km< /distance>
< rate>94%< /rate>
< star>4.6< /star>
< /shop>
< /shops>
< /response>
優(yōu)點:xml非常清晰的把結(jié)構(gòu)化數(shù)據(jù)表示出來了
缺點:表示數(shù)據(jù)需要引入大量的標簽,看起來非常繁瑣,同時也占用了不少的網(wǎng)絡(luò)帶寬
國內(nèi),最貴的硬件資源,就是網(wǎng)絡(luò)帶寬

json

最流行的一種數(shù)據(jù)組織格式
本質(zhì)上也是鍵值對,看起來比xml要干凈不少
請求:
{
useId:1234,
position:“100 80”
}
json中,使用{}表示鍵值對,使用[]表示數(shù)組,數(shù)組里的每個元素,可以是數(shù)字,可以是字符串,也可以是其他的{},[]
響應(yīng):
[
{
name:‘老麻抄手’,
image:‘1.jpg’,
distance:1km,
rate:96%,
star:4.7
},
name:‘魚香肉絲’,
image:‘1.jpg’,
distance:2km,
rate:97%,
star:4.5
]
當前最主流的一種網(wǎng)絡(luò)數(shù)據(jù)傳輸?shù)母袷?未來實際開發(fā)中經(jīng)常會用到j(luò)son格式的數(shù)據(jù)
json對于換行并不敏感,如果這些內(nèi)容全部都放在同一行,也是完全合法的
一般網(wǎng)絡(luò)傳輸?shù)臅r候,會對json進行壓縮(去掉不必要的換行和空格),同時把所有的數(shù)據(jù)放到一行去,整體占用的帶寬就更低了,但是會影響到可讀性

protobuffer

谷歌提供的一套,二進制的數(shù)據(jù)序列化方式
使用二進制的方式,約定某幾個字節(jié),表示哪個屬性
最大程度上節(jié)省了空間(不必傳輸key,根據(jù)位置和長度,區(qū)分每個屬性)
優(yōu)點:
節(jié)省帶寬,最大化優(yōu)化效率
缺點:二進制數(shù)據(jù),肉眼無法直接觀察,不方便調(diào)試
使用起來也是比較復(fù)雜的,需要專門編寫一個proto文件,描述數(shù)據(jù)的格式咋寫,proto需要一系列的語法,有點像java/c++又不太一樣,再進一步的通過proto提供的工具,把proto文件轉(zhuǎn)化成一些代碼,再嵌入到程序中使用,這個主要用于對于性能要求更高的場景
對于一個程序來說,開發(fā)效率/運行效率哪個更重要
通常來說,是開發(fā)效率更重要,可以通過提升硬件設(shè)備,來提高運行效率,想要提高開發(fā)效率,就得招聘更多的程序員,成本開銷更大
當然,在類似游戲開發(fā)的場景,就是需要運行效率更高比較重要文章來源地址http://www.zghlxwxcb.cn/news/detail-836024.html

到了這里,關(guān)于如何自定義一個協(xié)議的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔相關(guān)法律責任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • 談?wù)劸W(wǎng)絡(luò)協(xié)議的定義、組成和重要性

    個人主頁: insist--個人主頁?????? 本文專欄:網(wǎng)絡(luò)基礎(chǔ)——帶你走進網(wǎng)絡(luò)世界 本專欄會持續(xù)更新網(wǎng)絡(luò)基礎(chǔ)知識,希望大家多多支持,讓我們一起探索這個神奇而廣闊的網(wǎng)絡(luò)世界。 目錄 一、網(wǎng)絡(luò)協(xié)議的定義 二、網(wǎng)絡(luò)協(xié)議的組成

    2024年02月12日
    瀏覽(20)
  • 網(wǎng)絡(luò)編程五--自定義應(yīng)用層協(xié)議

    網(wǎng)絡(luò)編程五--自定義應(yīng)用層協(xié)議

    前面回聲服務(wù)器/客戶端介紹了如何通過對收發(fā)IO的控制實現(xiàn)回聲服務(wù)器/客戶端。 在服務(wù)器端應(yīng)用層的處理(協(xié)議)可以看作是“回聲操作”,即回發(fā)客戶端發(fā)來的消息。而在客戶端應(yīng)用層的處理(協(xié)議)則只是簡單顯示服務(wù)器回發(fā)的內(nèi)容。 而協(xié)議的通俗理解,就是為了完成

    2024年02月03日
    瀏覽(22)
  • workerman 自定義的協(xié)議如何解決粘包拆包

    workerman 自定義的協(xié)議如何解決粘包拆包

    前言: ? ? ? ? 由于最近在使用 workerman 實現(xiàn) Unity3D 聯(lián)機游戲的服務(wù)端,雖然也可以通過 TCP 協(xié)議直接通信,但是在實際測試的過程中發(fā)現(xiàn)了一些小問題。 ? ? ? ? 比如雙方的數(shù)據(jù)包都是字符串的方式嗎,還有就因為是字符串就需要切割,而有時候在客戶端或服務(wù)端接收時都

    2024年02月09日
    瀏覽(18)
  • 【網(wǎng)絡(luò)原理進階篇】自定義協(xié)議,協(xié)議約定符,三次握手,四次揮手,TCP(保證可靠性機制)和UDP原理

    【網(wǎng)絡(luò)原理進階篇】自定義協(xié)議,協(xié)議約定符,三次握手,四次揮手,TCP(保證可靠性機制)和UDP原理

    前言: 大家好,我是 良辰丫 ,我們已經(jīng)學習了網(wǎng)絡(luò)原理基礎(chǔ)版,初步認識了網(wǎng)絡(luò),還學習了網(wǎng)絡(luò)編程,了解了網(wǎng)絡(luò)通信的各種程序,接下來我們更深入的了解網(wǎng)絡(luò)是如何工作的.這篇文章我們主要介紹協(xié)議,UDP和TCP的一些原理.???? ??個人主頁:良辰針不戳 ??所屬專欄:javaEE初階 ??

    2023年04月24日
    瀏覽(23)
  • 如何自定義一個單例類?

    要自定義編寫一個單例類,有兩種方法如下: 一、餓漢式單例: 餓漢式單例指的是在 類加載時就創(chuàng)建并初始化單例對象 。下面是一個簡單的餓漢式單例Bean的示例: 二、懶漢式單例: 1、將類的 構(gòu)造方法私有化 ,以防止其他代碼通過new創(chuàng)建對象。 2、在類內(nèi)部創(chuàng)建一

    2024年02月13日
    瀏覽(14)
  • 【Linux】簡單的網(wǎng)絡(luò)計算器的實現(xiàn)(自定義協(xié)議,序列化,反序列化)

    【Linux】簡單的網(wǎng)絡(luò)計算器的實現(xiàn)(自定義協(xié)議,序列化,反序列化)

    我們需要實現(xiàn)一個服務(wù)器版的加法器. 我們需要客戶端把要計算的兩個加數(shù)發(fā)過去, 然后由服務(wù)器進行計算, 最后再把結(jié)果返回給客戶端` 詳細可參考我之前寫的博客【Linux】記錄錯誤信息日志的實現(xiàn)

    2024年02月19日
    瀏覽(29)
  • 根據(jù)源碼,模擬實現(xiàn) RabbitMQ - 網(wǎng)絡(luò)通訊設(shè)計,自定義應(yīng)用層協(xié)議,實現(xiàn) BrokerServer (8)

    根據(jù)源碼,模擬實現(xiàn) RabbitMQ - 網(wǎng)絡(luò)通訊設(shè)計,自定義應(yīng)用層協(xié)議,實現(xiàn) BrokerServer (8)

    目錄 一、網(wǎng)絡(luò)通訊協(xié)議設(shè)計 1.1、交互模型 1.2、自定義應(yīng)用層協(xié)議 1.2.1、請求和響應(yīng)格式約定 ?編輯 1.2.2、參數(shù)說明 1.2.3、具體例子 1.2.4、特殊栗子 1.3、實現(xiàn) BrokerServer 1.3.1、屬性和構(gòu)造 1.3.2、啟動 BrokerServer 1.3.3、停止 BrokerServer 1.3.4、處理每一個客戶端連接 1.3.5、讀取請求

    2024年02月10日
    瀏覽(20)
  • 如何正確實現(xiàn)一個自定義 Exception

    最近在公司的項目中,編寫了幾個自定義的 Exception 類。提交 PR 的時候,sonarqube 提示這幾個自定義異常不符合 ISerializable patten. 花了點時間稍微研究了一下,把這個問題解了。今天在此記錄一下,可能大家都會幫助到大家。 編寫一個自定義的異常,繼承自 Exception,其中定義

    2024年02月10日
    瀏覽(11)
  • python如何定義一個簡單的隊列

    python如何定義一個簡單的隊列

    哈哈,其實根本不需要用 類 (class)去定義一個 隊列 (queue),因為我沒有想到 list 結(jié)構(gòu)竟然這么萬能,它本身就是一個活生生的 隊列 。 1.定義一個隊列,其實就是一個列表哈哈,說明一下,隊頭在前面,隊尾在后面。 即,這個隊列a對應(yīng)如下圖示: 2.入隊 insert tail ,這個大家

    2023年04月08日
    瀏覽(13)
  • angular中如何定義一個全局組件?

    angular中如何定義一個全局組件?

    需求,我們需要新建一個navBreadcrumb的全局組件。這是一個面包屑導(dǎo)航,在不同的頁面引入時傳入一個路由數(shù)組即可。 第一步:我們新建這個組件: 這里有幾個要注意的點: 1 ---nav-breadcrumb.module----------這個文件時一定要的。angular和vue/react不同,modulecomponent,對于任何頁面而

    2024年02月12日
    瀏覽(26)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包