收銀臺的客戶端需要連接各種外設(shè)設(shè)備,包括小票打印機(jī),智能POS,掃描槍等外圍設(shè)備。
傳統(tǒng)的收銀臺只有PC端,外圍設(shè)備通常都是通過有線的形式連接到PC。
現(xiàn)代的收銀臺除了PC端,還有手機(jī),平板電腦等移動收銀臺。
手機(jī)和平板不能通過有線的形式連接到外圍設(shè)備,需要通過藍(lán)牙,WiFi,GPRS,NFC等無線形式連接到外圍設(shè)備。
基于這種情形下,設(shè)備服務(wù)器需要有以下特性。
1.可擴(kuò)展。由于外圍設(shè)備的類型和個數(shù)不確定,設(shè)備服務(wù)器必須支持添加設(shè)備,刪除設(shè)備。
2.可共享。一個現(xiàn)代的收銀系統(tǒng)可以包括多個客戶端,比如PC端,iOS端,Android端。一個客戶端連接的設(shè)備,可以共享其他客戶端。
3.穩(wěn)定。設(shè)備狀態(tài)可以檢測,設(shè)備掉線可以重連,設(shè)備出錯可以重試,可以脫機(jī)工作。
4.高性能。設(shè)備必須穩(wěn)定高效的工作,要有一定的吞吐量??梢圆⑿谢蛘叽泄ぷ?。
設(shè)備服務(wù)器實現(xiàn)方案。
1.可擴(kuò)展
高度抽象外設(shè)設(shè)備的基類。
一般的外圍設(shè)備都有支持一下幾種功能:
a.設(shè)備的查找或者發(fā)現(xiàn)
b.設(shè)備的連接
c.設(shè)備的狀態(tài)檢測
d.設(shè)備的基本信息
e.設(shè)備的數(shù)據(jù)讀寫
基于這些外圍設(shè)備基類,每種設(shè)備實現(xiàn)自己的子類。
外圍設(shè)備在基類的內(nèi)部實現(xiàn)自己的連接方式,列如藍(lán)牙,WiFi,GPRS,NFC。
設(shè)備服務(wù)器不需要關(guān)心外圍設(shè)備的實現(xiàn)方式,直接管理外圍設(shè)備。
這樣設(shè)備服務(wù)器就可以支持不同的外圍設(shè)備。
2.可共享。
一般收銀系統(tǒng)的客戶端都在一個局域網(wǎng)中,比如一個飯店的收銀系統(tǒng)的客戶端連接到一個WiFi上。
由于所有的客戶端都在一個局域中,每個客戶端啟動一個本地的HTTP請求。
客戶端添加外圍設(shè)備時,都把自己連接的外圍設(shè)備信息發(fā)送到中央服務(wù)器。
其他設(shè)備通過查詢中央服務(wù)器,可以獲取到分享的外圍設(shè)備的信息,然后向共享外圍設(shè)備的客戶端發(fā)起HTTP請求。
分享外圍設(shè)備的客戶端收到請求后,向自己連接的外圍設(shè)備轉(zhuǎn)發(fā)請求。
3.穩(wěn)定。
設(shè)計緩存隊列,超時策略,完善設(shè)備狀態(tài)監(jiān)測,掉線重連方案,出錯重連方案。
每種設(shè)備的連接方式不一樣,所有必須根據(jù)設(shè)備的特性、驅(qū)動,盡可能考慮所有的可能所有出錯的場景,不斷的試錯,不斷完善。
多和設(shè)備廠商聯(lián)系,向技術(shù)支持請教。
去掉一些不穩(wěn)的設(shè)備,尋找同種設(shè)備的最佳廠商。
4.高性能。
使用多線程,信號量,同步鎖。
同一個設(shè)備串行,不同設(shè)備并行。
找出性能的瓶頸,并進(jìn)行優(yōu)化。