王海峰++張偉
摘 要:通過基于Java Socket的農(nóng)業(yè)監(jiān)測系統(tǒng)及其相關(guān)應用,農(nóng)業(yè)生產(chǎn)者可以通過Web得到實用性強的數(shù)據(jù),從而對農(nóng)作物進行有效控制。該系統(tǒng)結(jié)合Socket通信和數(shù)據(jù)庫連接池來進行數(shù)據(jù)存儲,可以使系統(tǒng)的知識庫能適應網(wǎng)絡(luò)環(huán)境的應用和分布式處理,并具有較好的移植性和擴展性。
關(guān)鍵詞:農(nóng)業(yè)監(jiān)測系統(tǒng);應用;Socket通信;數(shù)據(jù)庫連接池
中圖分類號:TP311 文獻標識碼:A 文章編號:2095-1302(2016)02-00-02
0 引 言
充分利用農(nóng)業(yè)監(jiān)測系統(tǒng)采集點多的優(yōu)勢,建立Web平臺的農(nóng)業(yè)監(jiān)測系統(tǒng)是解決我國農(nóng)業(yè)問題的一條切實可行的便利途徑。將節(jié)點接入系統(tǒng)后,再加入安全性驗證,保證雙方數(shù)據(jù)安全并使得數(shù)據(jù)實時刷新。系統(tǒng)采用 TCP標準Java實現(xiàn),完成服務(wù)端和客戶端的信息傳輸,同時通過連接池訪問數(shù)據(jù)庫,實現(xiàn)了C/S模式經(jīng)典三層架構(gòu),從而使得系統(tǒng)更易使用和安全。該平臺服務(wù)器端架構(gòu)于Windows 7系統(tǒng)下,數(shù)據(jù)庫采用MySQL。
1 TCP 協(xié)議原理
TCP/IP是一組不同的協(xié)議組合在一起構(gòu)成的協(xié)議簇[1],通常稱該協(xié)議簇為TCP/IP。TCP和UDP是信息傳輸?shù)膬蓚€主要協(xié)議。TCP是面向連接的服務(wù),若要傳輸數(shù)據(jù),應先構(gòu)建可靠連接通道,而后終端計算機通過這條通道來傳輸數(shù)據(jù)。使用TCP傳遞數(shù)據(jù)之前,終端之間應先創(chuàng)建連接[2],實現(xiàn)可靠信息傳遞。對于傳輸前不需要構(gòu)建連接的UDP協(xié)議,傳輸時不需要等待主機任何響應,也不能保障數(shù)據(jù)的安全,數(shù)據(jù)傳遞是不可靠的。基于可靠性數(shù)據(jù)傳輸考慮,系統(tǒng)通過TCP協(xié)議達到信息安全傳遞的目的。
2 TCP 實現(xiàn)Java Socket通信
Java不僅跨平臺,同時支持多線程,而且還自帶驗證方法,從而提高了代碼的安全度,故系統(tǒng)運用Java開發(fā)。Socket俗稱套接字,作用于進程間,一般包含終端計算機名、目標端口、標準約定名,用以表示網(wǎng)絡(luò)上的兩個目標主機,即每個終端含有Socket,同時在兩終端間構(gòu)建了虛“通道”,實現(xiàn)穩(wěn)定連接。涉及網(wǎng)絡(luò)開發(fā)的Java類大都存放于網(wǎng)絡(luò)包里,它運用以TCP協(xié)議作為標準的Socket類[3]和Server Socket類創(chuàng)建“通道”。當前客/服模式是網(wǎng)絡(luò)通信的經(jīng)典結(jié)構(gòu)。
2.1 Socket客戶端套接字
運用Socket類可研發(fā)客戶端應用,它可自主請求服務(wù)器,以public Socket(InetAddressaddress,intport)throws IOException方法構(gòu)造Socket對象,它創(chuàng)建了同目標計算機的連接。
2.2 ServerSocket服務(wù)器端套接字
服務(wù)器端ServerSocket類可監(jiān)聽和處理連接請求,獲取數(shù)據(jù)[4]后,返回對應結(jié)果。服務(wù)器端指定本地計算機8888端口,若創(chuàng)建服務(wù)器端失敗,則會捕獲非正常情況。
調(diào)用ServerSocket.accept()監(jiān)聽Socket連接請求,同時做出連接響應,該響應顯示了兩終端連接[5],終端間運用Socket對象進行信息傳輸。但調(diào)用accept()會阻塞運行線程,Server端只有收到客戶端連接請求,才會給出對應結(jié)果。
若服務(wù)器端要適應客戶端的并發(fā)請求,一般有兩種方式:(1)服務(wù)器端循環(huán)給多個用戶做出響應;(2)服務(wù)器端并發(fā)處理客戶端請求,該方式要求多線程實現(xiàn)。系統(tǒng)以并發(fā)多線程方式工作,通過實現(xiàn)Runnable接口來實現(xiàn)多線程,即每一個客戶端請求啟動一個服務(wù)器端線程,其工作原理如圖1所示。
2.3 Socket通信過程
構(gòu)建Socket通信過程的步驟如下:
(1)構(gòu)造對象ServerSocket并指定目標端口,創(chuàng)建Socket類作為客戶端。
(2)使用accept()方法監(jiān)聽連接請求。
(3)使用getInputStream()和getOutputStream()方法來獲得輸入流和輸出流。通訊兩端依據(jù)約定獲取數(shù)據(jù),從而達到信息傳遞的目標。
(4)結(jié)束傳輸后,用close()關(guān)閉兩端連接。
Socket交互過程工作原理如圖2所示。
3 連接池工作原理
以往,開發(fā)人員運用jdbc[6]構(gòu)建數(shù)據(jù)庫連接。但是在使用了jdbc連接的項目中,當請求較少時,數(shù)據(jù)庫還能較好運行,若存在大并發(fā)請求時,就會降低整個系統(tǒng)的性能。故系統(tǒng)采用連接池訪問數(shù)據(jù)庫。傳統(tǒng)jdbc連接數(shù)據(jù)庫過程如圖3所示。
在使用連接池前,會先構(gòu)建較多連接存放在內(nèi)存中供之后使用。連接池的運作方式是:首先向數(shù)據(jù)庫請求多個Connection,放置于池內(nèi),等待其它人構(gòu)建連接,結(jié)束后返還給連接池,連接不會銷毀,使得應用和數(shù)據(jù)庫之間獲得更多連接數(shù)。它允許應用多次采納現(xiàn)有連接,但不會去再創(chuàng)建,同時釋放空閑連接,從而降低數(shù)據(jù)庫負載。該方法使得數(shù)據(jù)庫更易操作,極大地提高了系統(tǒng)性能。
使用連接池主要有以下幾方面:
(1)建立連接池;
(2)管理連接池。當用戶需訪問數(shù)據(jù)庫時,不需要再構(gòu)建連接,而是跟連接池申請連接;
(3)封閉連接池。當系統(tǒng)結(jié)束運行時,連接池需要關(guān)閉,釋放內(nèi)存,緩解主機壓力。
使用連接池創(chuàng)建連接的過程如圖4所示。
4 實現(xiàn)農(nóng)業(yè)監(jiān)測系統(tǒng)服務(wù)器
農(nóng)業(yè)監(jiān)測系統(tǒng)服務(wù)器運行于Windows7操作系統(tǒng),采用專線與底層相連。當服務(wù)器端啟動后,客戶端向它請求構(gòu)建連接,此時服務(wù)器端做出響應,會啟動一線程,同時創(chuàng)建服務(wù)器端Socket與客戶端間的連接,以獲取傳輸數(shù)據(jù),從而截取業(yè)務(wù)信息,而后依據(jù)業(yè)務(wù)類型不同調(diào)用對應業(yè)務(wù)類處理,之后客戶端接收到返回結(jié)果,形成經(jīng)典三層架構(gòu)。其結(jié)構(gòu)如圖5所示。
5 結(jié) 語
通過Java提供的Java Socket和連接池構(gòu)建了經(jīng)典三層結(jié)構(gòu)的農(nóng)業(yè)監(jiān)測系統(tǒng),服務(wù)器端作為中間層訪問數(shù)據(jù)庫,將數(shù)據(jù)信息返回給另一終端。由于模型層與視圖層的分離,當其它應用層需要變化時,客戶端不必修改,極大地提升了模塊的重用性。這樣服務(wù)器端作為中間層,不僅系統(tǒng)安全得到保障,同時規(guī)避了重要接口外露,使得整個系統(tǒng)可穩(wěn)定安全運行。伴隨著時代的發(fā)展,該結(jié)構(gòu)將得到普及。
參考文獻
[1] LARRY L P,BRUCE S D.計算機網(wǎng)絡(luò)系統(tǒng)方法[M].葉新銘,賈波,等,譯.北京:機械工業(yè)出版社,2005.
[2] CHAD D.Java網(wǎng)絡(luò)編程指南[M].邱仲潘,等,譯.北京:電子工業(yè)出版社,2002.
[3]陸正武,張志立.Java項目開發(fā)實踐[M].北京:中國鐵道出版社,2005.
[4]劉曉華.精通Java核心技術(shù)[M].北京:電子工業(yè)出版社,2003.
[5]耿祥義,張躍平.JAVA 2實用教程[M].北京:清華大學出版社,2012.
[6]田翔川.JSP 數(shù)據(jù)庫連接池的設(shè)計[J].計算機應用研究,2004,21 (2):198-199.endprint
物聯(lián)網(wǎng)技術(shù)2016年2期