workman接收的信息大小在哪里設(shè)置呢
我用workman 的socket上傳一張圖片的時(shí)候接收不全圖片的信息。
TCP是基于流的,客戶端發(fā)送的請(qǐng)求數(shù)據(jù)是像水流一樣流入到服務(wù)端,服務(wù)端探測(cè)到有數(shù)據(jù)到來后應(yīng)該檢查數(shù)據(jù)是否是完整的,因?yàn)榭赡苤皇且粋€(gè)請(qǐng)求的部分?jǐn)?shù)據(jù)到達(dá)服務(wù)端,甚至可能是多個(gè)請(qǐng)求連在一起到達(dá)服務(wù)端。如何判斷請(qǐng)求是否全部到達(dá)或者從多個(gè)連在一起的請(qǐng)求中分離請(qǐng)求,就需要規(guī)定一套通訊協(xié)議。
參考http://doc3.workerman.net/protocols/why-protocols.html。
上面沒有說一定是多個(gè)請(qǐng)求才會(huì)出現(xiàn)這種情況。這個(gè)是TCP的機(jī)制,是正常的。
TCP是基于流的,客戶端發(fā)送的請(qǐng)求數(shù)據(jù)是像水流一樣流入到服務(wù)端,服務(wù)端探測(cè)到有數(shù)據(jù)到來后應(yīng)該檢查數(shù)據(jù)是否是完整的,因?yàn)榭赡苤皇且粋€(gè)請(qǐng)求的部分?jǐn)?shù)據(jù)到達(dá)服務(wù)端
比如上傳了一個(gè)文件,文件是一點(diǎn)一點(diǎn)上傳到服務(wù)端的,如果沒有設(shè)置通訊協(xié)議,服務(wù)端每收到數(shù)據(jù)都會(huì)觸發(fā)onMessage,但是onMessage里的數(shù)據(jù)只是部分?jǐn)?shù)據(jù),需要把這些數(shù)據(jù)組裝起來才是完整的數(shù)據(jù)。
如果設(shè)置了應(yīng)用層通訊協(xié)議,服務(wù)端會(huì)根據(jù)協(xié)議規(guī)則判斷這個(gè)文件有多大,然后每收到部分?jǐn)?shù)據(jù)就將它們緩沖并拼接起來,直到收到全部數(shù)據(jù),然后觸發(fā)onMessage,這樣設(shè)置了通訊協(xié)議后onMessage里的文件就是完整的了。
例如用http協(xié)議上傳一個(gè)文件,根據(jù)http協(xié)議規(guī)則,http包的頭部會(huì)包含這個(gè)文件的大小,服務(wù)端根據(jù)規(guī)則讀取這個(gè)大小,然后將每次收到的一點(diǎn)數(shù)據(jù)拼接起來,最后組成一個(gè)完整的http請(qǐng)求,包體是文件數(shù)據(jù),并觸發(fā)onMessage,得到完整的文件數(shù)據(jù)。
參考http://doc3.workerman.net/protocols/why-protocols.html。