手上有個(gè)物聯(lián)網(wǎng)的項(xiàng)目,應(yīng)用場(chǎng)景如下:全國(guó)各地部署了很多計(jì)量表具(GPRS上傳數(shù)據(jù)),現(xiàn)在需要制作一套管理系統(tǒng),實(shí)現(xiàn)對(duì)這些表具的管理,核心部分有這些要求
1 制作一個(gè)展示及管理界面 (以下簡(jiǎn)稱A) (這個(gè)沒(méi)有問(wèn)題,也與Workerman無(wú)關(guān))
2 計(jì)劃采用Workerman TCP 長(zhǎng)連接模式來(lái)管理這些 GPRS客戶端(以下簡(jiǎn)稱B)
現(xiàn)在有些沒(méi)弄明白的地方
1 每次服務(wù)器啟動(dòng)是否都需要命令行啟動(dòng)Workerman編寫(xiě)的后臺(tái)程序 B
2 后臺(tái)程序 B 是否可以使用一套我自己封裝過(guò)的MYSQL類,便于操作MYSQL
3 前臺(tái)程序A 與 后臺(tái)程序?。隆≈g的通訊(比如向指定設(shè)備發(fā)送消息,這個(gè)前面有人問(wèn)到,但是有個(gè)問(wèn)題沒(méi)看明白,因?yàn)槊總€(gè)TCP鏈接是有UID的,A如何實(shí)時(shí)獲取這個(gè)UID)
4 后臺(tái)程序 B 是否支持對(duì)每個(gè)TCP鏈接定時(shí)發(fā)送數(shù)據(jù)
5 后臺(tái)程序B 與GPRS之間的通訊均為一段或長(zhǎng)或段的十六進(jìn)制數(shù)據(jù)(沒(méi)有特定的開(kāi)始或結(jié)束標(biāo)志),這個(gè)是不是直接采用標(biāo)準(zhǔn)的TCP協(xié)議就可以
又看了下文檔,TCP鏈接的UID是自定義的,也就是說(shuō)我自己定義,這樣一來(lái),我只需要在A中 調(diào)用 sendMessageByUid ,并直接使用我自定義的UID就可以了。
其實(shí)也就是這個(gè)UID我事先都已經(jīng)定好了,哪個(gè)設(shè)備的GPRS鏈接,我就直接賦值,同樣,我需要往哪個(gè)設(shè)備發(fā)消息,那我也使用這個(gè)UID就好了
不知道以上理解是否正確???
1 每次服務(wù)器啟動(dòng)是否都需要命令行啟動(dòng)Workerman編寫(xiě)的后臺(tái)程序 B
是的
2 后臺(tái)程序 B 是否可以使用一套我自己封裝過(guò)的MYSQL類,便于操作MYSQL
可以。
但是需要注意如果mysql鏈接長(zhǎng)時(shí)間沒(méi)有通訊,mysql鏈接會(huì)被mysql服務(wù)端斷開(kāi),客戶端再次使用這個(gè)鏈接時(shí)會(huì)報(bào)mysql gone away錯(cuò)誤。
解決方法大致兩種:
1、使用短鏈接,每個(gè)請(qǐng)求處理完畢關(guān)閉數(shù)據(jù)庫(kù)鏈接。2、判斷下錯(cuò)誤碼,出現(xiàn)錯(cuò)誤重連一次mysql
3 前臺(tái)程序A 與 后臺(tái)程序 B 之間的通訊(比如向指定設(shè)備發(fā)送消息,這個(gè)前面有人問(wèn)到,但是有個(gè)問(wèn)題沒(méi)看明白,因?yàn)槊總€(gè)TCP鏈接是有UID的,A如何實(shí)時(shí)獲取這個(gè)UID)
uid是自定義的,可以理解為你設(shè)備的全局唯一的名稱或者id
4 后臺(tái)程序 B 是否支持對(duì)每個(gè)TCP鏈接定時(shí)發(fā)送數(shù)據(jù)
支持,這是基本的功能。
5 后臺(tái)程序B 與GPRS之間的通訊均為一段或長(zhǎng)或段的十六進(jìn)制數(shù)據(jù)(沒(méi)有特定的開(kāi)始或結(jié)束標(biāo)志),這個(gè)是不是直接采用標(biāo)準(zhǔn)的TCP協(xié)議就可以
最好有個(gè)分辨包大小的標(biāo)志,tcp有粘包的特性,數(shù)據(jù)如果連在一起可能無(wú)法分辨。有時(shí)候會(huì)出現(xiàn)數(shù)據(jù)還沒(méi)接收完全就被處理的情況