本發(fā)明涉及通信技術(shù)領(lǐng)域,特別涉及一種數(shù)據(jù)存儲(chǔ)方法、客戶端、服務(wù)端、可讀介質(zhì)及存儲(chǔ)控制器。
背景技術(shù):
C/S(Client/Server,客戶機(jī)/服務(wù)器)架構(gòu)或者是B/S(Browser/Server,瀏覽器/服務(wù)器)架構(gòu)是企業(yè)中經(jīng)常采用的架構(gòu)模式。用戶可通過(guò)客戶機(jī)或者是瀏覽器將數(shù)據(jù)保存至服務(wù)器上。但是由于服務(wù)器功能復(fù)雜,而且又長(zhǎng)時(shí)間暴露在網(wǎng)絡(luò)中,因此很可能會(huì)發(fā)生故障崩潰。那么一旦服務(wù)器發(fā)生故障崩潰,將會(huì)導(dǎo)致未保存的數(shù)據(jù)無(wú)法進(jìn)行保存的問(wèn)題。因此,在服務(wù)器恢復(fù)正常后,為避免數(shù)據(jù)丟失,還需對(duì)這部分未保存的數(shù)據(jù)再次進(jìn)行保存。
目前,服務(wù)器恢復(fù)正常后,在對(duì)未保存的數(shù)據(jù)再次進(jìn)行保存時(shí),需要用戶在客戶機(jī)或者是瀏覽器上重新輸入這部分未保存數(shù)據(jù),然后提交到恢復(fù)正常的服務(wù)器上進(jìn)行保存。
然而,一臺(tái)服務(wù)器往往對(duì)應(yīng)多個(gè)客戶機(jī)或者是瀏覽器,那么在服務(wù)器恢復(fù)正常后,就需要用戶在對(duì)應(yīng)的每一個(gè)客戶機(jī)或者是瀏覽器上均重新輸入相應(yīng)的未保存數(shù)據(jù)。整個(gè)過(guò)程耗時(shí)較長(zhǎng)。而且,如果重新輸入的未保存數(shù)據(jù)的數(shù)據(jù)量較大,則需要更長(zhǎng)的時(shí)間。因此,數(shù)據(jù)存儲(chǔ)的效率較低。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明實(shí)施例提供了一種數(shù)據(jù)存儲(chǔ)方法、客戶端、服務(wù)端、可讀介質(zhì)及存儲(chǔ)控制器,能夠有效提高數(shù)據(jù)存儲(chǔ)的效率。
第一方面,本發(fā)明實(shí)施例提供了一種數(shù)據(jù)存儲(chǔ)方法,應(yīng)用于客戶端,
向服務(wù)端發(fā)送會(huì)話請(qǐng)求,并接收所述服務(wù)端根據(jù)所述會(huì)話請(qǐng)求確定并發(fā)送的會(huì)話ID;
獲取會(huì)話數(shù)據(jù),并存儲(chǔ);
還包括:
向所述服務(wù)端發(fā)送攜帶所述會(huì)話ID的數(shù)據(jù)提交請(qǐng)求,以使所述服務(wù)端根據(jù)所述數(shù)據(jù)提交請(qǐng)求中攜帶的所述會(huì)話ID確定是否返回故障恢復(fù)狀態(tài)碼;
當(dāng)接收到所述服務(wù)端返回的所述故障恢復(fù)狀態(tài)碼時(shí),將存儲(chǔ)的所述會(huì)話數(shù)據(jù)以及所述會(huì)話ID發(fā)送給所述服務(wù)端,以使所述服務(wù)端根據(jù)所述會(huì)話ID存儲(chǔ)所述會(huì)話數(shù)據(jù)。
優(yōu)選地,
進(jìn)一步包括:
當(dāng)未接收到所述服務(wù)端返回的所述故障恢復(fù)狀態(tài)碼時(shí),從所述會(huì)話數(shù)據(jù)中確定出未成功發(fā)送至所述服務(wù)端的待發(fā)送數(shù)據(jù);
將確定的所述待發(fā)送數(shù)據(jù)發(fā)送給所述服務(wù)端,以使所述服務(wù)端接收并存儲(chǔ)所述待發(fā)送數(shù)據(jù)。
第二方面,本發(fā)明實(shí)施例提供了一種客戶端,包括:第一發(fā)送單元、第一接收單元、獲取單元、存儲(chǔ)單元、第二發(fā)送單元及第一處理單元,其中,
所述第一發(fā)送單元,用于向服務(wù)端發(fā)送會(huì)話請(qǐng)求;
所述第一接收單元,用于接收所述服務(wù)端根據(jù)所述第一發(fā)送單元確定并發(fā)送的所述會(huì)話請(qǐng)求發(fā)送的會(huì)話ID;
所述獲取單元,用于獲取會(huì)話數(shù)據(jù);
所述存儲(chǔ)單元,用于存儲(chǔ)所述獲取單元獲取的所述會(huì)話數(shù)據(jù);
所述第二發(fā)送單元,用于向所述服務(wù)端發(fā)送攜帶所述會(huì)話ID的數(shù)據(jù)提交請(qǐng)求,以使所述服務(wù)端根據(jù)所述數(shù)據(jù)提交請(qǐng)求中攜帶的所述會(huì)話ID確定是否返回故障恢復(fù)狀態(tài)碼;
所述第一處理單元,用于接收到所述服務(wù)端返回的所述故障恢復(fù)狀態(tài)碼時(shí),將存儲(chǔ)的所述會(huì)話數(shù)據(jù)以及所述會(huì)話ID發(fā)送給所述服務(wù)端,以使所述服務(wù)端根據(jù)所述會(huì)話ID存儲(chǔ)所述會(huì)話數(shù)據(jù)。
優(yōu)選地,
進(jìn)一步包括:第二處理單元;
所述第二處理單元,用于當(dāng)未接收到所述服務(wù)端返回的所述故障恢復(fù)狀態(tài)碼時(shí),從所述會(huì)話數(shù)據(jù)中確定出未成功發(fā)送至所述服務(wù)端的待發(fā)送數(shù)據(jù);將確定的所述待發(fā)送數(shù)據(jù)發(fā)送給所述服務(wù)端,以使所述服務(wù)端接收并存儲(chǔ)所述待發(fā)送數(shù)據(jù)。
第三方面,本發(fā)明實(shí)施例提供了一種數(shù)據(jù)存儲(chǔ)方法,應(yīng)用于服務(wù)端,
接收客戶端發(fā)送的會(huì)話請(qǐng)求,并根據(jù)所述會(huì)話請(qǐng)求確定會(huì)話ID,向所述客戶端發(fā)送所述會(huì)話ID;
還包括:
接收所述客戶端發(fā)送的攜帶所述會(huì)話ID的數(shù)據(jù)提交請(qǐng)求;
根據(jù)所述數(shù)據(jù)提交請(qǐng)求中攜帶的所述會(huì)話ID確定是否向所述客戶端返回故障恢復(fù)狀態(tài)碼;
當(dāng)向所述客戶端返回所述故障恢復(fù)狀態(tài)碼時(shí),接收所述客戶端發(fā)送的存儲(chǔ)的會(huì)話數(shù)據(jù)以及所述會(huì)話ID;
根據(jù)所述會(huì)話ID存儲(chǔ)所述會(huì)話數(shù)據(jù)。
優(yōu)選地,
進(jìn)一步包括:
當(dāng)未向所述客戶端返回所述故障恢復(fù)狀態(tài)碼時(shí),接收并存儲(chǔ)所述客戶端發(fā)送的所述會(huì)話數(shù)據(jù)中未成功發(fā)送的待發(fā)送數(shù)據(jù)。
第四方面,本發(fā)明實(shí)施例提供了一種服務(wù)端,包括:第一接收單元、發(fā)送單元、第二接收單元、確定單元、第三接收單元及存儲(chǔ)單元,其中,
所述第一接收單元,用于接收客戶端發(fā)送的會(huì)話請(qǐng)求;
所述發(fā)送單元,用于根據(jù)所述第一接收單元接收到的所述會(huì)話請(qǐng)求確定會(huì)話ID,向所述客戶端發(fā)送所述會(huì)話ID;
所述第二接收單元,用于接收所述客戶端發(fā)送的攜帶所述會(huì)話ID的數(shù)據(jù)提交請(qǐng)求;
所述確定單元,用于根據(jù)所述第二接收單元接收到的所述數(shù)據(jù)提交請(qǐng)求中攜帶的所述會(huì)話ID確定是否向所述客戶端返回故障恢復(fù)狀態(tài)碼;
所述第三接收單元,用于當(dāng)所述確定單元確定出向所述客戶端返回故障恢復(fù)狀態(tài)碼時(shí),接收所述客戶端發(fā)送的存儲(chǔ)的會(huì)話數(shù)據(jù)以及所述會(huì)話ID;
所述存儲(chǔ)單元,用于根據(jù)所述第三接收單元接收到的所述會(huì)話ID存儲(chǔ)所述所述第三接收單元接收到的所述會(huì)話數(shù)據(jù)。
優(yōu)選地,
進(jìn)一步包括:處理單元;
所述處理單元,用于當(dāng)所述確定單元確定出未向所述客戶端返回所述故障恢復(fù)狀態(tài)碼時(shí),接收并存儲(chǔ)所述客戶端發(fā)送的所述會(huì)話數(shù)據(jù)中未成功發(fā)送的待發(fā)送數(shù)據(jù)。
第五方面,本發(fā)明實(shí)施例提供了一種可讀介質(zhì),包括執(zhí)行指令,當(dāng)存儲(chǔ)控制器的處理器執(zhí)行所述執(zhí)行指令時(shí),所述存儲(chǔ)控制器執(zhí)行上述任一所述的方法。
第六方面,本發(fā)明實(shí)施例提供了一種存儲(chǔ)控制器,包括:處理器、存儲(chǔ)器和總線;
所述存儲(chǔ)器用于存儲(chǔ)執(zhí)行指令,所述處理器與所述存儲(chǔ)器通過(guò)所述總線連接,當(dāng)所述存儲(chǔ)控制器運(yùn)行時(shí),所述處理器執(zhí)行所述存儲(chǔ)器存儲(chǔ)的所述執(zhí)行指令,以使所述存儲(chǔ)控制器執(zhí)行上述任一所述的方法。
本發(fā)明實(shí)施例提供了數(shù)據(jù)存儲(chǔ)方法、客戶端、服務(wù)端、可讀介質(zhì)及存儲(chǔ)控制器,客戶端通過(guò)向服務(wù)端發(fā)送會(huì)話請(qǐng)求,以建立與服務(wù)端的會(huì)話連接,接收服務(wù)端根據(jù)該會(huì)話請(qǐng)求發(fā)送的會(huì)話ID,客戶端獲取待保存的會(huì)話數(shù)據(jù),并存儲(chǔ)該待保存的會(huì)話數(shù)據(jù),之后向服務(wù)端發(fā)送攜帶該會(huì)話ID的數(shù)據(jù)提交請(qǐng)求,以使服務(wù)端根據(jù)數(shù)據(jù)提交請(qǐng)求中攜帶的會(huì)話ID確定是否返回故障恢復(fù)狀態(tài)碼,進(jìn)而使客戶端知曉服務(wù)端是否發(fā)生故障崩潰且恢復(fù),那么當(dāng)客戶端接收到該故障恢復(fù)狀態(tài)碼時(shí),就可以自動(dòng)將已經(jīng)存儲(chǔ)的待保存的會(huì)話數(shù)據(jù)以及會(huì)話ID發(fā)送給服務(wù)端,而無(wú)需再由用戶重新輸入這些會(huì)話數(shù)據(jù),因此,提高了數(shù)據(jù)存儲(chǔ)的效率。
附圖說(shuō)明
為了更清楚地說(shuō)明本發(fā)明實(shí)施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對(duì)實(shí)施例或現(xiàn)有技術(shù)描述中所需要使用的附圖作簡(jiǎn)單地介紹,顯而易見(jiàn)地,下面描述中的附圖是本發(fā)明的一些實(shí)施例,對(duì)于本領(lǐng)域普通技術(shù)人員來(lái)講,在不付出創(chuàng)造性勞動(dòng)的前提下,還可以根據(jù)這些附圖獲得其他的附圖。
圖1是本發(fā)明一個(gè)實(shí)施例提供的應(yīng)用于客戶端的數(shù)據(jù)存儲(chǔ)方法的流程圖;
圖2是本發(fā)明一個(gè)實(shí)施例提供的應(yīng)用于服務(wù)端的數(shù)據(jù)存儲(chǔ)方法的流程圖;
圖3是本發(fā)明一個(gè)實(shí)施例提供的一種數(shù)據(jù)存儲(chǔ)方法的流程圖;
圖4是本發(fā)明一個(gè)實(shí)施例提供的一種客戶端的結(jié)構(gòu)示意圖;
圖5是本發(fā)明另一個(gè)實(shí)施例提供的一種客戶端的結(jié)構(gòu)示意圖;
圖6是本發(fā)明一個(gè)實(shí)施例提供的一種服務(wù)端的結(jié)構(gòu)示意圖;
圖7是本發(fā)明另一個(gè)實(shí)施例提供的一種服務(wù)端的結(jié)構(gòu)示意圖;
圖8是本發(fā)明一個(gè)實(shí)施例提供的一種數(shù)據(jù)存儲(chǔ)系統(tǒng)的結(jié)構(gòu)示意圖。
具體實(shí)施方式
為使本發(fā)明實(shí)施例的目的、技術(shù)方案和優(yōu)點(diǎn)更加清楚,下面將結(jié)合本發(fā)明實(shí)施例中的附圖,對(duì)本發(fā)明實(shí)施例中的技術(shù)方案進(jìn)行清楚、完整地描述,顯然,所描述的實(shí)施例是本發(fā)明一部分實(shí)施例,而不是全部的實(shí)施例,基于本發(fā)明中的實(shí)施例,本領(lǐng)域普通技術(shù)人員在沒(méi)有做出創(chuàng)造性勞動(dòng)的前提下所獲得的所有其他實(shí)施例,都屬于本發(fā)明保護(hù)的范圍。
如圖1所示,本發(fā)明實(shí)施例提供了一種數(shù)據(jù)存儲(chǔ)方法,應(yīng)用于客戶端,該方法可以包括以下步驟:
步驟101:向服務(wù)端發(fā)送會(huì)話請(qǐng)求,并接收所述服務(wù)端根據(jù)所述會(huì)話請(qǐng)求確定并發(fā)送的會(huì)話ID。
步驟102:獲取會(huì)話數(shù)據(jù),并存儲(chǔ)。
步驟103:向所述服務(wù)端發(fā)送攜帶所述會(huì)話ID的數(shù)據(jù)提交請(qǐng)求,以使所述服務(wù)端根據(jù)所述數(shù)據(jù)提交請(qǐng)求中攜帶的所述會(huì)話ID確定是否返回故障恢復(fù)狀態(tài)碼。
步驟104:當(dāng)接收到所述服務(wù)端返回的所述故障恢復(fù)狀態(tài)碼時(shí),將存儲(chǔ)的所述會(huì)話數(shù)據(jù)以及所述會(huì)話ID發(fā)送給所述服務(wù)端,以使所述服務(wù)端根據(jù)所述會(huì)話ID存儲(chǔ)所述會(huì)話數(shù)據(jù)。
在圖1所示的實(shí)施例中,客戶端通過(guò)向服務(wù)端發(fā)送會(huì)話請(qǐng)求,以建立與服務(wù)端的會(huì)話連接,接收服務(wù)端根據(jù)該會(huì)話請(qǐng)求發(fā)送的會(huì)話ID,客戶端獲取待保存的會(huì)話數(shù)據(jù),并存儲(chǔ)該待保存的會(huì)話數(shù)據(jù),之后向服務(wù)端發(fā)送攜帶該會(huì)話ID的數(shù)據(jù)提交請(qǐng)求,以使服務(wù)端根據(jù)數(shù)據(jù)提交請(qǐng)求中攜帶的會(huì)話ID確定是否返回故障恢復(fù)狀態(tài)碼,進(jìn)而使客戶端知曉服務(wù)端是否發(fā)生故障崩潰且恢復(fù),那么當(dāng)客戶端接收到該故障恢復(fù)狀態(tài)碼時(shí),就可以自動(dòng)將已經(jīng)存儲(chǔ)的待保存的會(huì)話數(shù)據(jù)以及會(huì)話ID發(fā)送給服務(wù)端,而無(wú)需再由用戶重新輸入這些會(huì)話數(shù)據(jù),因此,提高了數(shù)據(jù)存儲(chǔ)的效率。
在本發(fā)明一個(gè)實(shí)施例中,為了避免重復(fù)發(fā)送數(shù)據(jù),進(jìn)一步包括:當(dāng)未接收到所述服務(wù)端返回的所述故障恢復(fù)狀態(tài)碼時(shí),從所述會(huì)話數(shù)據(jù)中確定出未成功發(fā)送至所述服務(wù)端的待發(fā)送數(shù)據(jù);將確定的所述待發(fā)送數(shù)據(jù)發(fā)送給所述服務(wù)端,以使所述服務(wù)端接收并存儲(chǔ)所述待發(fā)送數(shù)據(jù)。
其中,客戶端存儲(chǔ)的會(huì)話數(shù)據(jù)中包含兩種形式的數(shù)據(jù),第一種是成功發(fā)送至服務(wù)端暫存的數(shù)據(jù),第二種是未成功發(fā)送至服務(wù)端的待發(fā)送數(shù)據(jù)。在本發(fā)明實(shí)施例中,服務(wù)端并未發(fā)生故障崩潰時(shí),為防止用戶在客戶端點(diǎn)擊保存時(shí)一次提交的數(shù)據(jù)量過(guò)大而造成擁堵,客戶端可在獲取會(huì)話數(shù)據(jù)的同時(shí),按照一定的數(shù)據(jù)量大小等其它規(guī)則,分批次的將獲取到的數(shù)據(jù)發(fā)送至服務(wù)端的內(nèi)存上暫存。那么如果服務(wù)端沒(méi)有發(fā)生故障崩潰,也即客戶端沒(méi)有接收到故障恢復(fù)狀態(tài)碼,也即客戶端之前發(fā)送至服務(wù)端的會(huì)話數(shù)據(jù)中的第一種數(shù)據(jù)并沒(méi)有丟失,因此,客戶端只需再將會(huì)話數(shù)據(jù)中的第二種數(shù)據(jù)發(fā)送至服務(wù)器上即可。
舉例來(lái)說(shuō),用戶需要通過(guò)客戶端將10個(gè)身份證號(hào)碼保存至服務(wù)端,且客戶端是按照每5個(gè)身份證號(hào)碼為一組的規(guī)則進(jìn)行發(fā)送,假設(shè)客戶端第一次將用戶輸入的前5個(gè)身份證號(hào)碼發(fā)送給了服務(wù)端的內(nèi)存,且服務(wù)端并沒(méi)有發(fā)生故障崩潰,那么接下來(lái),客戶端只需將后5個(gè)發(fā)送給服務(wù)端的內(nèi)存,而前5個(gè)無(wú)需再發(fā)。但是如果第一次發(fā)送成功之后,服務(wù)端發(fā)生了故障崩潰,那么服務(wù)端內(nèi)存上之前暫存的前5個(gè)身份證號(hào)碼也會(huì)隨之丟失,而后5個(gè)還并未發(fā)出,因此,在服務(wù)端恢復(fù)正常工作后,客戶端需將前5個(gè)和后5個(gè)身份證號(hào)碼均發(fā)送至服務(wù)端上(該過(guò)程是數(shù)據(jù)恢復(fù)的過(guò)程,客戶端可將10個(gè)身份證號(hào)碼一并發(fā)送給服務(wù)端,或者是根據(jù)用戶需求分批發(fā)送)。
如圖2所示,本發(fā)明實(shí)施例提供了一種數(shù)據(jù)存儲(chǔ)方法,應(yīng)用于服務(wù)端,該方法可以包括如下步驟:
步驟201:接收客戶端發(fā)送的會(huì)話請(qǐng)求,并根據(jù)所述會(huì)話請(qǐng)求確定會(huì)話ID,向所述客戶端發(fā)送所述會(huì)話ID。
步驟202:接收所述客戶端發(fā)送的攜帶所述會(huì)話ID的數(shù)據(jù)提交請(qǐng)求。
步驟203:根據(jù)所述數(shù)據(jù)提交請(qǐng)求中攜帶的所述會(huì)話ID確定是否向所述客戶端返回故障恢復(fù)狀態(tài)碼。
步驟204:當(dāng)向所述客戶端返回所述故障恢復(fù)狀態(tài)碼時(shí),接收所述客戶端發(fā)送的存儲(chǔ)的會(huì)話數(shù)據(jù)以及所述會(huì)話ID。
步驟205:根據(jù)所述會(huì)話ID存儲(chǔ)所述會(huì)話數(shù)據(jù)。
在圖2所示的實(shí)施例中,服務(wù)端在接收到客戶端發(fā)送的會(huì)話請(qǐng)求后,會(huì)為客戶端發(fā)送一個(gè)會(huì)話ID,之后當(dāng)接收到客戶端發(fā)送的數(shù)據(jù)提交請(qǐng)求后,則會(huì)根據(jù)該請(qǐng)求中攜帶的會(huì)話ID確定其是否發(fā)生了故障崩潰且又恢復(fù),如果是,則通過(guò)發(fā)送故障恢復(fù)狀態(tài)碼告知客戶端,那么之后在接收到客戶端發(fā)送的存儲(chǔ)的待保存的會(huì)話數(shù)據(jù)以及會(huì)話ID后,就可根據(jù)該會(huì)話ID,再次初始化相應(yīng)的會(huì)話上下文,進(jìn)而對(duì)會(huì)話數(shù)據(jù)進(jìn)行存儲(chǔ)。
在本發(fā)明一個(gè)實(shí)施例中,進(jìn)一步包括:當(dāng)未向所述客戶端返回所述故障恢復(fù)狀態(tài)碼時(shí),接收并存儲(chǔ)所述客戶端發(fā)送的所述會(huì)話數(shù)據(jù)中未成功發(fā)送的待發(fā)送數(shù)據(jù)。
下面將以存儲(chǔ)報(bào)銷單為例,詳細(xì)說(shuō)明本發(fā)明實(shí)施例提供的數(shù)據(jù)存儲(chǔ)方法,如圖3所示,該方法可以包括以下步驟:
步驟301:客戶端向服務(wù)端發(fā)送會(huì)話請(qǐng)求。
在本發(fā)明實(shí)施例中,客戶端可同時(shí)指代客戶機(jī)和瀏覽器。
步驟302:服務(wù)端接收客戶端發(fā)送的會(huì)話請(qǐng)求,并根據(jù)會(huì)話請(qǐng)求確定會(huì)話ID,向客戶端發(fā)送會(huì)話ID。
在本發(fā)明實(shí)施例中,當(dāng)該客戶端登錄并首次請(qǐng)求服務(wù)端時(shí),服務(wù)端會(huì)為該客戶端初始化一個(gè)功能級(jí)的會(huì)話上下文(實(shí)現(xiàn)數(shù)據(jù)存儲(chǔ)的必要條件),其中,該功能級(jí)的上下文具有一個(gè)在整個(gè)服務(wù)端范圍內(nèi)的唯一會(huì)話ID。
步驟303:客戶端接收服務(wù)端發(fā)送的會(huì)話ID。
步驟304:客戶端獲取報(bào)銷單數(shù)據(jù),并存儲(chǔ)。
其中,報(bào)銷單數(shù)據(jù)是會(huì)話數(shù)據(jù)中的一種。
例如,報(bào)銷單的錄入界面中共包括報(bào)銷人、報(bào)銷金額、報(bào)銷類型及報(bào)銷時(shí)間四個(gè)字段。那么在用戶輸入相應(yīng)數(shù)據(jù)的同時(shí),客戶端則會(huì)將這些數(shù)據(jù)保存至本地的存儲(chǔ)區(qū)域中,而且,在錄入過(guò)程中,客戶端可每?jī)蓚€(gè)字段發(fā)送至服務(wù)端。假設(shè)用戶第一次輸入了報(bào)銷人“張某某”,第二次輸入了報(bào)銷金額“3000元”,那么在輸入了3000元之后,客戶端可將這兩個(gè)字段發(fā)送至服務(wù)端暫存。
值得說(shuō)明的是,針對(duì)客戶端在本地存儲(chǔ)的報(bào)銷單數(shù)據(jù),為不占用內(nèi)存,可在報(bào)銷單存儲(chǔ)至服務(wù)端數(shù)據(jù)庫(kù)或者是硬盤后進(jìn)行自動(dòng)刪除。
步驟305:客戶端向服務(wù)端發(fā)送攜帶會(huì)話ID的數(shù)據(jù)提交請(qǐng)求。
步驟306:服務(wù)端接收客戶端發(fā)送的攜帶會(huì)話ID的數(shù)據(jù)提交請(qǐng)求,并根據(jù)會(huì)話ID確定是否向客戶端返回故障恢復(fù)狀態(tài)碼N,如果是,執(zhí)行步驟307,否則,執(zhí)行步驟309。
在本發(fā)明實(shí)施例中,服務(wù)端可根據(jù)會(huì)話ID判斷該請(qǐng)求對(duì)應(yīng)的的功能級(jí)的會(huì)話上下文是否已初始化,如果已初始化,則表明服務(wù)端并未發(fā)生故障崩潰,否則,則表明服務(wù)端發(fā)生過(guò)故障崩潰但恢復(fù)。
例如,客戶端成功將報(bào)銷單數(shù)據(jù)中的報(bào)銷人“張某某”及報(bào)銷金額“3000元”發(fā)送給了服務(wù)端,但隨后服務(wù)端發(fā)生了故障崩潰,而輸入的報(bào)銷類型“辦公用品”及報(bào)銷時(shí)間“2017/2/6/星期五”還未成功發(fā)送至服務(wù)端,此時(shí),暫存在服務(wù)端的報(bào)銷人“張某某”及報(bào)銷金額“3000元”也因?yàn)榉?wù)端的故障崩潰而丟失。
步驟307:客戶端接收服務(wù)端發(fā)送的故障恢復(fù)狀態(tài)碼N,并將存儲(chǔ)的報(bào)銷單數(shù)據(jù)以及會(huì)話ID發(fā)送給服務(wù)端。
根據(jù)上述步驟306,客戶端在接收到N,知曉服務(wù)端發(fā)生故障崩潰后,需將在服務(wù)端丟失的但在本地存儲(chǔ)的報(bào)銷人“張某某”、報(bào)銷金額“3000元”,以及存儲(chǔ)在本地但還未成功發(fā)送至服務(wù)端的“辦公用品”、報(bào)銷時(shí)間“2017/2/6/星期五”均發(fā)送至服務(wù)端。
另外,服務(wù)端在發(fā)送這些報(bào)價(jià)單數(shù)據(jù)以及會(huì)話ID的同時(shí),還可發(fā)送表征這些未保存的報(bào)價(jià)單數(shù)據(jù)的狀態(tài)碼R。
步驟308:服務(wù)端接收客戶端發(fā)送的報(bào)銷單數(shù)據(jù)以及會(huì)話ID,根據(jù)會(huì)話ID存儲(chǔ)報(bào)銷單數(shù)據(jù),并結(jié)束當(dāng)前進(jìn)程。
在本發(fā)明實(shí)施例中,服務(wù)端根據(jù)會(huì)話ID重新初始化功能級(jí)上下文,將接收到的報(bào)銷單數(shù)據(jù)暫存,并可在用戶執(zhí)行保存后將報(bào)價(jià)單保存到數(shù)據(jù)庫(kù)或者是硬盤上。
步驟309:客戶端從報(bào)價(jià)單數(shù)據(jù)中確定出未成功發(fā)送至服務(wù)端的待發(fā)送數(shù)據(jù),并將確定的待發(fā)送數(shù)據(jù)發(fā)送給服務(wù)端。
在本發(fā)明實(shí)施例中,根據(jù)步驟306可知,待發(fā)送數(shù)據(jù)為:報(bào)銷類型“辦公用品”及報(bào)銷時(shí)間“2017/2/6/星期五”,因此,在當(dāng)前情況下,客戶端只需將這兩項(xiàng)數(shù)據(jù)發(fā)送給服務(wù)端即可。
步驟310:服務(wù)端接收并存儲(chǔ)客戶端發(fā)送的之前未成功發(fā)送的待發(fā)送數(shù)據(jù)。
如圖4所示,本發(fā)明實(shí)施例提供了一種客戶端,包括:
第一發(fā)送單元401、第一接收單元402、獲取單元403、存儲(chǔ)單元404、第二發(fā)送單元405及第一處理單元406,其中,
所述第一發(fā)送單元401,用于向服務(wù)端發(fā)送會(huì)話請(qǐng)求;
所述第一接收單元402,用于接收所述服務(wù)端根據(jù)所述第一發(fā)送單元401確定并發(fā)送的所述會(huì)話請(qǐng)求發(fā)送的會(huì)話ID;
所述獲取單元403,用于獲取會(huì)話數(shù)據(jù);
所述存儲(chǔ)單元404,用于存儲(chǔ)所述獲取單元403獲取的所述會(huì)話數(shù)據(jù);
所述第二發(fā)送單元405,用于向所述服務(wù)端發(fā)送攜帶所述會(huì)話ID的數(shù)據(jù)提交請(qǐng)求,以使所述服務(wù)端根據(jù)所述數(shù)據(jù)提交請(qǐng)求中攜帶的所述會(huì)話ID確定是否返回故障恢復(fù)狀態(tài)碼;
所述第一處理單元406,用于當(dāng)接收到所述服務(wù)端返回的所述故障恢復(fù)狀態(tài)碼時(shí),將存儲(chǔ)的所述會(huì)話數(shù)據(jù)以及所述會(huì)話ID發(fā)送給所述服務(wù)端,以使所述服務(wù)端根據(jù)所述會(huì)話ID存儲(chǔ)所述會(huì)話數(shù)據(jù)。
如圖5所示,進(jìn)一步包括:第二處理單元501;
所述第二處理單元501,用于當(dāng)未接收到所述服務(wù)端返回的所述故障恢復(fù)狀態(tài)碼時(shí),從所述會(huì)話數(shù)據(jù)中確定出未成功發(fā)送至所述服務(wù)端的待發(fā)送數(shù)據(jù);將確定的所述待發(fā)送數(shù)據(jù)發(fā)送給所述服務(wù)端,以使所述服務(wù)端接收并存儲(chǔ)所述待發(fā)送數(shù)據(jù)。
如圖6所示,本發(fā)明實(shí)施例提供了一種服務(wù)端,包括:
第一接收單元601、發(fā)送單元602、第二接收單元603、確定單元604、第三接收單元605及存儲(chǔ)單元606,其中,
所述第一接收單元601,用于接收客戶端發(fā)送的會(huì)話請(qǐng)求;
所述發(fā)送單元602,用于根據(jù)所述第一接收單元601接收到的所述會(huì)話請(qǐng)求確定會(huì)話ID,向所述客戶端發(fā)送所述會(huì)話ID;
所述第二接收單元603,用于接收所述客戶端發(fā)送的攜帶所述會(huì)話ID的數(shù)據(jù)提交請(qǐng)求;
所述確定單元604,用于根據(jù)所述第二接收單元603接收到的所述數(shù)據(jù)提交請(qǐng)求中攜帶的所述會(huì)話ID確定是否向所述客戶端返回故障恢復(fù)狀態(tài)碼;
所述第三接收單元605,用于當(dāng)所述確定單元604確定出向所述客戶端返回故障恢復(fù)狀態(tài)碼時(shí),接收所述客戶端發(fā)送的存儲(chǔ)的會(huì)話數(shù)據(jù)以及所述會(huì)話ID;
所述存儲(chǔ)單元606,用于根據(jù)所述第三接收單元605接收到的所述會(huì)話ID存儲(chǔ)所述所述第三接收單元605接收到的所述會(huì)話數(shù)據(jù)。
如圖7所示,進(jìn)一步包括:處理單元701;
所述處理單元701,用于當(dāng)所述確定單元604確定出未向所述客戶端返回所述故障恢復(fù)狀態(tài)碼時(shí),接收并存儲(chǔ)所述客戶端發(fā)送的所述會(huì)話數(shù)據(jù)中未成功發(fā)送的待發(fā)送數(shù)據(jù)。
本發(fā)明實(shí)施例提供了一種可讀介質(zhì),包括執(zhí)行指令,當(dāng)存儲(chǔ)控制器的處理器執(zhí)行所述執(zhí)行指令時(shí),所述存儲(chǔ)控制器上述各個(gè)實(shí)施例中任一所述的方法。
本發(fā)明實(shí)施例提供了一種存儲(chǔ)控制器,包括:處理器、存儲(chǔ)器和總線;
所述存儲(chǔ)器用于存儲(chǔ)執(zhí)行指令,所述處理器與所述存儲(chǔ)器通過(guò)所述總線連接,當(dāng)所述存儲(chǔ)控制器運(yùn)行時(shí),所述處理器執(zhí)行所述存儲(chǔ)器存儲(chǔ)的所述執(zhí)行指令,以使所述存儲(chǔ)控制器執(zhí)行上述各個(gè)實(shí)施例中任一所述的方法。
如圖8所示,本發(fā)明實(shí)施例提供了一種數(shù)據(jù)存儲(chǔ)系統(tǒng),包括:至少一個(gè)上述任一所述的客戶端801,以及上述任一所述的服務(wù)端802。
綜上,本發(fā)明各個(gè)實(shí)施例至少具有如下有益效果:
1、在本發(fā)明實(shí)施例中,客戶端通過(guò)向服務(wù)端發(fā)送會(huì)話請(qǐng)求,以建立與服務(wù)端的會(huì)話連接,接收服務(wù)端根據(jù)該會(huì)話請(qǐng)求發(fā)送的會(huì)話ID,客戶端獲取待保存的會(huì)話數(shù)據(jù),并存儲(chǔ)該待保存的會(huì)話數(shù)據(jù),之后向服務(wù)端發(fā)送攜帶該會(huì)話ID的數(shù)據(jù)提交請(qǐng)求,以使服務(wù)端根據(jù)數(shù)據(jù)提交請(qǐng)求中攜帶的會(huì)話ID確定是否返回故障恢復(fù)狀態(tài)碼,進(jìn)而使客戶端知曉服務(wù)端是否發(fā)生故障崩潰且恢復(fù),那么當(dāng)客戶端接收到該故障恢復(fù)狀態(tài)碼時(shí),就可以自動(dòng)將已經(jīng)存儲(chǔ)的待保存的會(huì)話數(shù)據(jù)以及會(huì)話ID發(fā)送給服務(wù)端,而無(wú)需再由用戶重新輸入這些會(huì)話數(shù)據(jù),因此,提高了數(shù)據(jù)存儲(chǔ)的效率。
2、在本發(fā)明實(shí)施例中,通過(guò)避免用戶重新輸入未保存數(shù)據(jù),較好的提升了用戶體驗(yàn)。另外,服務(wù)端通過(guò)向客戶端發(fā)送故障恢復(fù)狀態(tài)碼,可有效避免客戶端不知曉服務(wù)端發(fā)生過(guò)故障崩潰而造成的用戶數(shù)據(jù)丟失。
3、在本發(fā)明實(shí)施例中,當(dāng)客戶端未接收到故障恢復(fù)狀態(tài)碼時(shí),客戶端通過(guò)從會(huì)話數(shù)據(jù)中確定出未成功發(fā)送至服務(wù)端的待發(fā)送數(shù)據(jù),并將確定的待發(fā)送數(shù)據(jù)發(fā)送給服務(wù)端,可有效避免重復(fù)發(fā)送數(shù)據(jù)。
上述裝置內(nèi)的各單元之間的信息交互、執(zhí)行過(guò)程等內(nèi)容,由于與本發(fā)明方法實(shí)施例基于同一構(gòu)思,具體內(nèi)容可參見(jiàn)本發(fā)明方法實(shí)施例中的敘述,此處不再贅述。
需要說(shuō)明的是,在本文中,諸如第一和第二之類的關(guān)系術(shù)語(yǔ)僅僅用來(lái)將一個(gè)實(shí)體或者操作與另一個(gè)實(shí)體或操作區(qū)分開(kāi)來(lái),而不一定要求或者暗示這些實(shí)體或操作之間存在任何這種實(shí)際的關(guān)系或者順序。而且,術(shù)語(yǔ)“包括”、“包含”或者其任何其他變體意在涵蓋非排他性的包含,從而使得包括一系列要素的過(guò)程、方法、物品或者設(shè)備不僅包括那些要素,而且還包括沒(méi)有明確列出的其他要素,或者是還包括為這種過(guò)程、方法、物品或者設(shè)備所固有的要素。在沒(méi)有更多限制的情況下,由語(yǔ)句“包括一個(gè)······”限定的要素,并不排除在包括所述要素的過(guò)程、方法、物品或者設(shè)備中還存在另外的相同因素。
本領(lǐng)域普通技術(shù)人員可以理解:實(shí)現(xiàn)上述方法實(shí)施例的全部或部分步驟可以通過(guò)程序指令相關(guān)的硬件來(lái)完成,前述的程序可以存儲(chǔ)在計(jì)算機(jī)可讀取的存儲(chǔ)介質(zhì)中,該程序在執(zhí)行時(shí),執(zhí)行包括上述方法實(shí)施例的步驟;而前述的存儲(chǔ)介質(zhì)包括:ROM、RAM、磁碟或者光盤等各種可以存儲(chǔ)程序代碼的介質(zhì)中。
最后需要說(shuō)明的是:以上所述僅為本發(fā)明的較佳實(shí)施例,僅用于說(shuō)明本發(fā)明的技術(shù)方案,并非用于限定本發(fā)明的保護(hù)范圍。凡在本發(fā)明的精神和原則之內(nèi)所做的任何修改、等同替換、改進(jìn)等,均包含在本發(fā)明的保護(hù)范圍內(nèi)。