勞建成,蔣遷謙
(廣東工業(yè)大學 自動化學院,廣東 廣州 510006)
基于PHP和Java的消息中間件的實現(xiàn)原理研究
勞建成,蔣遷謙
(廣東工業(yè)大學 自動化學院,廣東 廣州 510006)
隨著物聯(lián)網(wǎng)的快速發(fā)展,各個平臺支撐的設備數(shù)量也在急劇擴展,平臺也變得越來越復雜。當需要在平臺上增加新設備時,需要在原有程序的基礎上添加大量的代碼程序,這樣不僅大大增加了新程序的開發(fā)成本,同時增加了原有程序的維護成本。文章提出了一種基于PHP和Java的消息中間件的實現(xiàn)原理,可以完成消息轉發(fā)的流程,使得在開發(fā)新設備的服務器端程序時,減少對原有設備的服務器端程序的修改。
消息中間件;PHP;Java
由于互聯(lián)網(wǎng)帶寬和物聯(lián)網(wǎng)設備的快速發(fā)展,各種設備接入互聯(lián)網(wǎng)的需求不斷增長,需要編寫各種特定的程序和服務器去接收和處理設備發(fā)送過來的消息。而典型的物聯(lián)網(wǎng)設備的控制框架如圖1所示。
此時,對于服務器來說,一個極為重要的功能就是客戶端和物聯(lián)網(wǎng)終端設備消息的接收和處理。為了針對各種異構網(wǎng)絡的消息發(fā)送和接收,人們將這個重要的功能抽象出來,形成了一種特有的軟件,這就是消息中間件。
如圖2所示,消息中間件在TCP/IP 4層網(wǎng)絡體系結構中處于應用層的位置,建立在各種網(wǎng)絡應用程序之下,為網(wǎng)絡應用程序提供基礎的消息傳輸服務。
圖1 物聯(lián)網(wǎng)設備控制框架
圖2 消息中間件在TCP/IP協(xié)議族網(wǎng)絡體系結構中位置
超文本傳輸協(xié)議(HTTP)是應用層通信協(xié)議之一,日常使用最普遍的瀏覽器—服務器(B/S)框架就是基于HTTP協(xié)議開發(fā)的。在客戶端—服務器—物聯(lián)網(wǎng)設備終端的框架中主要用于客戶端—服務器之間的通信。在客戶端—服務器框架中,為了面向瀏覽器進行快速開發(fā),通常使用PHP編程語言進行開發(fā)。
但由于HTTP協(xié)議是一種請求—響應類型的無狀態(tài)的協(xié)議。而在服務器—物聯(lián)網(wǎng)設備終端的通信中,需要實現(xiàn)的是雙向?qū)Φ韧ㄐ?。并且服務器需要保存終端的消息,以便識別特定的終端。因此,需要對傳輸層的TCP協(xié)議重新封裝,設計新的應用層協(xié)議。
同時,由于終端的數(shù)量眾多,當服務器需要同時向多個終端發(fā)送消息時,通常需要使用多線程來解決。PHP編程語言并未在其核心語言級別支持多線程的實現(xiàn),而Java則在語言級別實現(xiàn)多線程,可以很輕易地進行多線程編程。
綜上,結合PHP與HTTP的優(yōu)點,使用HTTP協(xié)議和PHP編程實現(xiàn)用戶和服務器之間的交互,而對于終端和服務器的交互則使用基于TCP重新封裝的應用層協(xié)議和Java編程實現(xiàn)。對于PHP和Java之間的消息傳遞,通過本文提出的消息中間件的原理來實現(xiàn)。
對于消息中間件來說,主要是解決的是使用消息中間件雙方的通信問題,而消息的封裝形式則是通信的首要問題。良好的封裝形式意味著更低的數(shù)據(jù)冗余率,并且在編程過程中具有很好的排錯性。本方案中對于一般的消息采用JSON格式來進行封裝。
本方案采用Java中的Socket API為服務器與終端間通信編程。Socket API是Java對傳輸層的傳輸控制協(xié)議TCP和用戶數(shù)據(jù)包協(xié)議UDP進行了封裝后提供的應用程序接口。
在PHP端,需要設計一個函數(shù)以便讓PHP的服務器端程序調(diào)用該函數(shù)來使用消息中間件。同時,在Java客戶端同樣需要設計一個消息中間件類,以便使用消息中間件來發(fā)送和接收消息。
對于PHP的消息中間件,分為兩個函數(shù):消息接收函數(shù)和消息發(fā)送函數(shù)。其中,對于接收消息函數(shù),需要作為守護進程在系統(tǒng)中隨著HTTP服務器啟動,而發(fā)送函數(shù)則在需要發(fā)送消息時調(diào)用即可。
消息中間件的總體架構和工作流程如圖3所示。
互聯(lián)網(wǎng)與物聯(lián)網(wǎng)的快速發(fā)展對消息中間件的要求也越來越高,也誕生了許多適應不同業(yè)務場景的消息中間件,比如Redis和RocketMQ等。本文提出的中間件是一種輕量級的簡易中間件,但性能方面與許多開源的消息中間件還有很大的差距,希望能給軟件開發(fā)者帶來一點啟發(fā)。
圖3 消息中間件的總體架構和工作流程
[1]陳明,潘家銘,閻保平.消息中間件的設計與實現(xiàn)[J].微電子學與計算機,2005(4):4-7.
[2]甄甫,劉民,董明宇.基于面向服務架構消息中間件的業(yè)務流程系統(tǒng)集成方法研究[J].計算機集成制造系統(tǒng),2009(5):968-972.
[3]徐晶,許煒.消息中間件綜述[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
中國移動研發(fā)基金資助項目;項目編號:6120340。
勞建成(1991— ),男,廣東湛江,碩士研究生;研究方向:物聯(lián)網(wǎng),智能云服務系統(tǒng)。