雙線服務(wù)器響應(yīng)的不同類型

2021-03-17    分類: 網(wǎng)站建設(shè)

雙線服務(wù)器響應(yīng)的不同類型
一旦雙線服務(wù)器收到命令,會(huì)執(zhí)行命令,然后發(fā)送一個(gè)或多個(gè)響應(yīng)包。本篇將討論幾種不同類型的響應(yīng)。
數(shù)據(jù)域
數(shù)據(jù)域是許多雙線服務(wù)器響應(yīng)包的重要組件。一個(gè)數(shù)據(jù)域包括一個(gè)長度指定符序列,后面是實(shí)際的數(shù)據(jù)值。通過研究sql/pack.c中的net_store_length()定義可以理解長度指定符序列:
雙線服務(wù)器響應(yīng)的不同類型
正如你所看到的,如果length數(shù)值不超過251,那么代碼將它保存在1個(gè)字節(jié)中。如果是251字節(jié)以上但裝在兩個(gè)字節(jié)中,則代碼為其加上252這個(gè)數(shù)值前綴,然后將其寫到接下來的兩個(gè)字節(jié)中。如果兩個(gè)字節(jié)不夠而4個(gè)字節(jié)夠用,則代碼使用253作為代碼,然后以長度占用后面的字節(jié)。如果4個(gè)字節(jié)不夠,則代碼使用254作為代碼,然后存儲(chǔ)在8個(gè)字節(jié)中。必須注意,代碼后面的所有長度值都低字節(jié)優(yōu)先存儲(chǔ)。
有人可能會(huì)問,為什么把1字節(jié)長度限制為251,而net_store_length()中的個(gè)保留值卻是252?代碼251具有特殊的含義,它表明代碼后面沒有長度數(shù)值或數(shù)據(jù),且該域的數(shù)值為SQL NULL。
為什么要這么復(fù)雜呢?大多數(shù)時(shí)候數(shù)據(jù)域都相當(dāng)短,尤其是,如果一個(gè)查詢返回大量記錄或選擇了大量列,那么,響應(yīng)中將有大量這些內(nèi)容。在這種情況下,每個(gè)域只要浪費(fèi)1個(gè)字節(jié),會(huì)積少成多形成龐大的系統(tǒng)開銷。域長度超過250的機(jī)會(huì)相對(duì)較少,但即使是在這種情況下,浪費(fèi)1字節(jié)也不會(huì)引入注意——因?yàn)?a >雙線服務(wù)器至少已經(jīng)在發(fā)送253個(gè)字節(jié):長度至少占用2字節(jié),域值至少占用251字節(jié)。
緊跟在長度序列后面的是實(shí)際數(shù)據(jù)值,該值被轉(zhuǎn)換為字符串表達(dá)式。
OK包
發(fā)送OK包則表示雙線服務(wù)器成功執(zhí)行了命令。發(fā)送OK包是對(duì)下列命令的響應(yīng):
雙線服務(wù)器響應(yīng)的不同類型
這一類型的包括用于不要求返回結(jié)構(gòu)集的命令。然而它的格式卻允許發(fā)送一些額外的狀態(tài)信息,如修改記錄的數(shù)目、自動(dòng)生成的主鍵數(shù)值、或者字符串格式的狀態(tài)消息。包體的結(jié)構(gòu)收錄在表4-8中。
雙線服務(wù)器響應(yīng)的不同類型
為了從雙線服務(wù)器內(nèi)部發(fā)送OK包,你必須調(diào)用send_ok()。
錯(cuò)誤包
在處理命令時(shí)如果發(fā)生錯(cuò)誤,雙線服務(wù)器會(huì)以錯(cuò)誤包進(jìn)行響應(yīng)。格式收錄在表4-9中。
對(duì)狀態(tài)字節(jié)區(qū)采用7字節(jié)限制的原因是,包體起始處的十進(jìn)制254字節(jié)可以具有不同的含義:可以使用本篇前文的“數(shù)據(jù)域”中描述的域長度格式來指定結(jié)構(gòu)集中的域的數(shù)目。
為了發(fā)送一個(gè)EOF包,雙線服務(wù)器會(huì)使用send_eof()。
結(jié)果集包
大量查詢產(chǎn)生一個(gè)結(jié)果集,具體例子有SELECT、SHOW、CHECK、REPAIR、EXPLAIN。只要所期望的來自查詢的信息多于簡單的狀態(tài)報(bào)告,會(huì)返回結(jié)果集。結(jié)果集包含一系列包。
.包體包括標(biāo)準(zhǔn)長度指定符序列的包,不過目前的數(shù)值含義不一樣,它指的是結(jié)果集中的域的數(shù)目。
.一組域描述符包,每個(gè)域一個(gè)包,采用結(jié)果集中的域順序。
.EOF結(jié)束包
域描述包的包體格式如表4-11和4-12所示。
雙線服務(wù)器響應(yīng)的不同類型
在發(fā)送各個(gè)包的域定義序列之后,雙線服務(wù)器接著發(fā)送數(shù)據(jù)的實(shí)際行,每行一個(gè)包。每行數(shù)據(jù)包包含一系列以標(biāo)準(zhǔn)域數(shù)據(jù)格式存儲(chǔ)的數(shù)值。在報(bào)告常規(guī)查詢結(jié)果時(shí),域數(shù)據(jù)會(huì)轉(zhuǎn)換為字符串格式。在使用預(yù)處理語句(COM_PREPARE)時(shí),域數(shù)據(jù)以本來格式發(fā)送,低字節(jié)優(yōu)先。
在發(fā)送出所有的數(shù)據(jù)行后,以EOF包終止包序列。

分享名稱:雙線服務(wù)器響應(yīng)的不同類型
本文地址:http://www.bm7419.com/news/105374.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供全網(wǎng)營銷推廣、品牌網(wǎng)站設(shè)計(jì)、網(wǎng)站改版、網(wǎng)站策劃網(wǎng)站導(dǎo)航、搜索引擎優(yōu)化

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

網(wǎng)站托管運(yùn)營