勞建成,蔣遷謙
(廣東工業(yè)大學(xué) 自動(dòng)化學(xué)院,廣東 廣州 510006)
基于PHP和Java的消息中間件的實(shí)現(xiàn)原理研究
勞建成,蔣遷謙
(廣東工業(yè)大學(xué) 自動(dòng)化學(xué)院,廣東 廣州 510006)
隨著物聯(lián)網(wǎng)的快速發(fā)展,各個(gè)平臺(tái)支撐的設(shè)備數(shù)量也在急劇擴(kuò)展,平臺(tái)也變得越來越復(fù)雜。當(dāng)需要在平臺(tái)上增加新設(shè)備時(shí),需要在原有程序的基礎(chǔ)上添加大量的代碼程序,這樣不僅大大增加了新程序的開發(fā)成本,同時(shí)增加了原有程序的維護(hù)成本。文章提出了一種基于PHP和Java的消息中間件的實(shí)現(xiàn)原理,可以完成消息轉(zhuǎn)發(fā)的流程,使得在開發(fā)新設(shè)備的服務(wù)器端程序時(shí),減少對原有設(shè)備的服務(wù)器端程序的修改。
消息中間件;PHP;Java
由于互聯(lián)網(wǎng)帶寬和物聯(lián)網(wǎng)設(shè)備的快速發(fā)展,各種設(shè)備接入互聯(lián)網(wǎng)的需求不斷增長,需要編寫各種特定的程序和服務(wù)器去接收和處理設(shè)備發(fā)送過來的消息。而典型的物聯(lián)網(wǎng)設(shè)備的控制框架如圖1所示。
此時(shí),對于服務(wù)器來說,一個(gè)極為重要的功能就是客戶端和物聯(lián)網(wǎng)終端設(shè)備消息的接收和處理。為了針對各種異構(gòu)網(wǎng)絡(luò)的消息發(fā)送和接收,人們將這個(gè)重要的功能抽象出來,形成了一種特有的軟件,這就是消息中間件。
如圖2所示,消息中間件在TCP/IP 4層網(wǎng)絡(luò)體系結(jié)構(gòu)中處于應(yīng)用層的位置,建立在各種網(wǎng)絡(luò)應(yīng)用程序之下,為網(wǎng)絡(luò)應(yīng)用程序提供基礎(chǔ)的消息傳輸服務(wù)。

圖1 物聯(lián)網(wǎng)設(shè)備控制框架

圖2 消息中間件在TCP/IP協(xié)議族網(wǎng)絡(luò)體系結(jié)構(gòu)中位置
超文本傳輸協(xié)議(HTTP)是應(yīng)用層通信協(xié)議之一,日常使用最普遍的瀏覽器—服務(wù)器(B/S)框架就是基于HTTP協(xié)議開發(fā)的。在客戶端—服務(wù)器—物聯(lián)網(wǎng)設(shè)備終端的框架中主要用于客戶端—服務(wù)器之間的通信。在客戶端—服務(wù)器框架中,為了面向?yàn)g覽器進(jìn)行快速開發(fā),通常使用PHP編程語言進(jìn)行開發(fā)。
但由于HTTP協(xié)議是一種請求—響應(yīng)類型的無狀態(tài)的協(xié)議。而在服務(wù)器—物聯(lián)網(wǎng)設(shè)備終端的通信中,需要實(shí)現(xiàn)的是雙向?qū)Φ韧ㄐ拧2⑶曳?wù)器需要保存終端的消息,以便識(shí)別特定的終端。因此,需要對傳輸層的TCP協(xié)議重新封裝,設(shè)計(jì)新的應(yīng)用層協(xié)議。
同時(shí),由于終端的數(shù)量眾多,當(dāng)服務(wù)器需要同時(shí)向多個(gè)終端發(fā)送消息時(shí),通常需要使用多線程來解決。PHP編程語言并未在其核心語言級別支持多線程的實(shí)現(xiàn),而Java則在語言級別實(shí)現(xiàn)多線程,可以很輕易地進(jìn)行多線程編程。
綜上,結(jié)合PHP與HTTP的優(yōu)點(diǎn),使用HTTP協(xié)議和PHP編程實(shí)現(xiàn)用戶和服務(wù)器之間的交互,而對于終端和服務(wù)器的交互則使用基于TCP重新封裝的應(yīng)用層協(xié)議和Java編程實(shí)現(xiàn)。對于PHP和Java之間的消息傳遞,通過本文提出的消息中間件的原理來實(shí)現(xiàn)。
對于消息中間件來說,主要是解決的是使用消息中間件雙方的通信問題,而消息的封裝形式則是通信的首要問題。良好的封裝形式意味著更低的數(shù)據(jù)冗余率,并且在編程過程中具有很好的排錯(cuò)性。本方案中對于一般的消息采用JSON格式來進(jìn)行封裝。
本方案采用Java中的Socket API為服務(wù)器與終端間通信編程。Socket API是Java對傳輸層的傳輸控制協(xié)議TCP和用戶數(shù)據(jù)包協(xié)議UDP進(jìn)行了封裝后提供的應(yīng)用程序接口。
在PHP端,需要設(shè)計(jì)一個(gè)函數(shù)以便讓PHP的服務(wù)器端程序調(diào)用該函數(shù)來使用消息中間件。同時(shí),在Java客戶端同樣需要設(shè)計(jì)一個(gè)消息中間件類,以便使用消息中間件來發(fā)送和接收消息。
對于PHP的消息中間件,分為兩個(gè)函數(shù):消息接收函數(shù)和消息發(fā)送函數(shù)。其中,對于接收消息函數(shù),需要作為守護(hù)進(jìn)程在系統(tǒng)中隨著HTTP服務(wù)器啟動(dòng),而發(fā)送函數(shù)則在需要發(fā)送消息時(shí)調(diào)用即可。
消息中間件的總體架構(gòu)和工作流程如圖3所示。
互聯(lián)網(wǎng)與物聯(lián)網(wǎng)的快速發(fā)展對消息中間件的要求也越來越高,也誕生了許多適應(yīng)不同業(yè)務(wù)場景的消息中間件,比如Redis和RocketMQ等。本文提出的中間件是一種輕量級的簡易中間件,但性能方面與許多開源的消息中間件還有很大的差距,希望能給軟件開發(fā)者帶來一點(diǎn)啟發(fā)。

圖3 消息中間件的總體架構(gòu)和工作流程
[1]陳明,潘家銘,閻保平.消息中間件的設(shè)計(jì)與實(shí)現(xiàn)[J].微電子學(xué)與計(jì)算機(jī),2005(4):4-7.
[2]甄甫,劉民,董明宇.基于面向服務(wù)架構(gòu)消息中間件的業(yè)務(wù)流程系統(tǒng)集成方法研究[J].計(jì)算機(jī)集成制造系統(tǒng),2009(5):968-972.
[3]徐晶,許煒.消息中間件綜述[J].計(jì)算機(jī)工程,2005(6):73-76.
[4]WANG C, WANG Z, XING H.Design of Message-oriented Middleware With Publish/Subscribe Model on Telemetry and Command Computer[C].The Second International Conference on Systems and Informatics, 2014:454-458.
[5]JOSEPH K H, YIHUAN W, XIN P.The Design and Implementation of EMP:A Message-Oriented Middleware for Mobile Cloud Computing[C]. 2013 IEEE Global High Tech Congress on Electronics, 2013:78-81.
Research on the principle of message-oriented middleware based on PHP and Java
Lao Jiancheng, Jiang Qianqian
(Automation School of Guangdong University of Technology, Guangzhou 510006, China)
With the rapid development of Internet of things, the amount of devices supported by every platform is expanding sharply and platforms are becoming more and more complex.When you need to add new devices on the platform, you need to add a great amount of code procedures on original code, which increase not only the development costs of new procedure, but also the maintenance costs of original ones. This paper present the realization principle of a new kind middleware of message based on PHP and Java. This message-oriented middleware can achieve the purpose of message forwarding flow, which means that we can reduce the modification of original device server-side program when developing the server-side program for the new device.
message-oriented middleware; PHP; Java
中國移動(dòng)研發(fā)基金資助項(xiàng)目;項(xiàng)目編號:6120340。
勞建成(1991— ),男,廣東湛江,碩士研究生;研究方向:物聯(lián)網(wǎng),智能云服務(wù)系統(tǒng)。