[訊息論壇] ICE Messaging Forum 康聖欣
/ 陸一凡
<特刊三之三> 訊息供應鏈 ─
實作
本週艾揚科技特針對前兩期訊息供應鏈的主題,就以車隊管理為題材,套用艾揚的訊息中介軟體
iPush® Server 實作出一套即時車隊監控的系統;希望藉由 Proof of
Concept (PoC),可讓各位讀者更進一步的了解艾揚的即時訊息技術在 ITS 的多重應用。
以下即為本次車隊管理的實作綱要:
在練習與實作後續範例前,你應該具備以下條件與能力:
一個基本的 Internet 即時車隊監控系統,通常由以下元件構成:
- 資訊來源
- 資訊分派者
- 資訊儲存者
- 資訊接收者
- 資訊計算者
- 輔助資訊提供者
我們以下圖表來簡單解釋一下:

| 車隊監控系統中的角色 |
敘述 |
| 資訊來源與資訊收集者 |
來自於車機的資訊,經由
GPRS,GSM,USSD,SMS 等傳輸協定來交換資料。資訊特性為資料長度短,頻率高;資訊內容主要包含車機識別碼,時間,GPS
點位資料,車輛時速,車機狀態等資訊。 |
| 資訊分派者 |
可接收來自多個車機的資訊,將已作過分類、處理的資料,快速傳遞至前端資訊接收者。在上圖中,即以
iPush® Server 扮演此角色。 |
| 資訊儲存者 |
接收來資訊分派者的即時資料儲存,以供日後歷史資料查詢。在上圖中,即以資料庫扮演此角色。 |
| 資訊接收者 |
接收來自資訊分派者的即時資料,作即時顯示與監控,實際可能的監控介面為
PC、PDA、 SmartPhone 等數位設備。 |
| 資訊計算者 |
接收來自資訊分派者的即時資料,作即時運算與條件判斷,再將運算後結果送往
iPush® Server (資訊分派者),供資訊接收者作即時顯示與監控,或作為預警訊息,在上圖中,以一
PC 作為運算主機扮演此角色。 |
| 輔助資訊提供者 |
提供額外的資訊給即時資訊接收者,可使即時顯示與監控界面更具親合力與彈性。在上圖中,以一
GIS Server 扮演此角色,提供監控座標內的背景地形街道圖。 |
在本範例中,我們會實作一套上述系統,但由於相關資源的限制,資訊儲存者與資訊計算者不在此範例實作中。此外,我們設計了一個軟體來模擬資訊來源以及資訊收集者,此軟體我們稱之為
Data Generator,它會定期產生車機資料給資訊分派者
(iPush® Server)。同時我們以一張靜態地圖
(由崧旭資訊提供) 來扮演 GIS Server 的腳色,並以 Java
Applet 作為資訊接收者來顯示車輛動態資訊。下圖即詳細架構:

| 車隊監控系統中的角色 |
敘述 |
| 資訊來源與資訊收集者 |
在此範例中,共有
5 個虛擬車機,分別隸屬於 5 個數值資訊來源,皆以檔案格式 (Local File Source) 存在。其資料格式為
(車機編號,時間,點位資料,時速)。在 iPush Server 中對應規劃使用 5 個 Channel,分別為
ch01~ch05。Data Generator 負責產生資料,車機 1~5 的數值資料分別從 Local
File 取得,然後分別出版 (Publish) 資料至 iPush® Server
Channel : ch01 ~ ch05。詳細設定可參考 Date Generator 的設定檔案 ─ DataGen.properties。 |
| 資訊分派者 |
iPush®
Server 所使用的 IP : Port 在此假設為 192.168.0.15 : 8000 (實際依您自己安裝的環境為準),在
iPush® Server BackOffice 需開立的 Service 與
User 帳號,Group/Product/User ID/Password 依序是 ICE/ICE/ice/ice。 |
| 資訊接收者 |
使用
Java Applet 所建立的監控程式,使用相同的 Service 與 User 帳號,分別訂閱 (Subscribe)
channel : ch01 ~ ch05,以接收來自 iPush® Server
的即時資訊,並做展示上的處理。 |
| 輔助資訊提供者 |
以事先選取的台北市街道圖(由崧旭資訊提供)做為監控程式背景,提供視覺化的即時車輛位置監控界面。在實務運作時,我們會以
GIS Server 做為此功能的提供者。 |
< iPush Server 安裝與測試
>
依據 iPush® Server Installation
Guide 的說明安裝 iPush® Server (在此以安裝 for Windows
2000 的版本為例)。安裝前請記得申請 License Key。
確認 iPush® Server 已安裝完成,並可正常執行。
->
iPush®
Server 安裝程式、Installation Guide、與 License
Key 申請,可以登入 ICE
Developer Center 進行之。
| 步驟二:在
iPush Server BackOffice 中新增 Service 與 User 帳號,並測試是否運作正常 |
請參閱 iPush® Server Getting Started
文件,或是 iPush® Server BackOffice 使用手冊,在 iPush®
Server BackOffice 中新增一組 Service 與 User 帳號,讓監控程式
(iPush Client AP) 接收即時資料使用。設定資料如下:
Add a new Service:
- Group: ICE
- Product: ICE
- Expiration Date: 依需要自行設定之
- Limited Connections: 依需要自行設定之,但建議高於
10 以上。

Add a new User for Java Applet client:
- Group: ICE
- Product: ICE
- User ID: monitor
- Password: monitor
- Re-Enter Password:
monitor
- Start Date: 依需要自行設定之,但必須早於今天
- Expiration Date: 依需要自行設定之
- Read Permission:
ch0 (代表對 Channel ch01~ch05 都有訊息接收的權限)
- Write Permission:
- (代表對任何 Channel,均無送訊息的權限)
- Concurrent use: 依需要自行設定之,但建議高於
10 以上。
- 其餘選項,依需要自行設定之。

另外,再設定另一組 Service 與 User 帳號,讓
Data Generator (這也是一個 iPush Client AP) 餵送即時資料使用。設定資料如下:
- Group: ICE
- Product: ICE
- User ID: datagen
- Password: datagen
- Re-Enter Password:
datagen
- Start Date: 依需要自行設定之,但必須早於今天
- Expiration Date: 依需要自行設定之
- Read Permission:
- (代表對任何 Channel,均無訊息接收的權限)
- Write Permission:
ch0 (代表對 Channel ch01~ch05 都有餵給訊息的權限)
- Concurrent use: 1
- 其餘選項,依需要自行設定之。

上述 Service 與兩組 User 帳號新增完成後,可以開啟兩個 TestMsgAgent
測試程式,一個扮演監控程式,一個扮演 Data Generator 角色,確認對 iPush Server 的訊息收送無誤。
->
iPush®
Server Getting Started、iPush®
Server BackOffice 使用手冊等文件,可以登入
ICE Developer Center 下載之。
->
TestMsgAgent 測試程式可以在 iPush®
Server 光碟的 VC API 範例程式中找到,或者至
ICE Developer Center 下載。
| 步驟三:下載與安裝
Java Development Kit (JDK) |
我們可以將負責產生即時訊息的 Data Generator,安裝在與 iPush®
Server 同一台的主機上 (當然,也可以不同)。由於 Data Generator 是以 Java 撰寫,compile
執行時必須要有 JDK 執行環境才行。若已經安裝則可以跳過;若尚未安裝,則可至 Java - J2SE 網站下載並安裝,網址為
http://java.sun.com/j2se/downloads.html。
->
記得在 Windows 的環境變數中加入 JDK 的路徑。
< 安裝 Data Generator
>
點按下列連結,下載 Data Generator 相關程式檔案:
下載後,依原目錄結構,解壓縮至 c:\ 目錄下 (當然,您也可以選擇使用不同的路徑)。
打開 c:\DataGen\DataGen.properties
檔案 (可以使用記事本開啟編輯之),對應在步驟二新增的
Data Generator Service 與 User 帳號,更改與 iPush®
Server 連線所需的資訊:
- ipush.ServerAddress=即您
iPush Server 的 IP 位址
- ipush.ServerPort=即
iPush Server 的 IP 服務埠號 ( for Windows 2000 版本預設為 8000)
- ipush.Company (即 Group)=ICE
- ipush.Product=ICE
- ipush.Username=datagen
- ipush.Password=datagen
其餘選項不變 (使用者可以自行依需要進行變更) 接著,開啟一個 DOS 作業視窗 (命令提示字元),於其中執行
c:\DataGen\DataGen.bat,讓 Data
Generator 可以根據設定,開始餵給 (Publish) 資料到 iPush®
Server。執行前請先確認先前安裝的 iPush® Server 正常運作中。

你可以開啟一個 TestMsgAgent 測試程式,對應在步驟二新增的監控程式 Service
與 User 帳號,訂閱 ch01, ch02, ch03, ch04, 與 ch05 頻道,看看是否能接收到 Data
Generator 所送出的資料。
< 實作 HTML + Java
Applet 監控程式 >
您所需的工具如下:
- 一個您慣用的 Editor (如 FrontPage、Dreamweaver、或記事本皆可)。
- 一張台北市街道圖,您可在此點按下載。< Download:「台北市街道圖」> (285
KB, 由崧旭資訊提供)
- iPush® Java component for
fleet demo (iceipush_utils.jar),您必須下載此包含 iPush®
Java Package API 的 iceipush_utils.jar 檔案。< Download:
iceipush_utils.jar> (28
KB)
將街道圖與 iPush® Java component
for fleet demo (iceipush_utils.jar) 存放於
c:\ipushdemo 目錄下 (或可依您的需求另擇目錄存放)。
Java Applet 原始碼可由此下載 < Download:
demo.java > (5 KB)下載後將此檔案存為
c:\ipushdemo\demo.java。
然後我們”開啟命令提示字元” (Command Prompt),在
c:\ipushdemo 路徑下執行以下指令來編譯 demo.java:
c:\ipushdemo>javac
–classpath iceipush_utils.jar;. demo.java

若編譯無誤,Java 編譯器會產生兩個 Java Class:CarData.class
與 demo.class。
此 demo.java 的原始碼解釋如下:
import com.icetech.ipush.*:
使用 iPush® Java API
class CarData:
車機資訊的定義 class,包含 Car ID,Timestamp,座標,時速,車輛顏色等
public void init():
- 顯示使用者界面,包括背景街道圖與即時資訊顯示欄位
- 使用 iPush.netConnect()
與 iPush® Server 連線
- 使用 iPush.SubScribe()
從 iPush® Server 訂閱頻道,在此為”ch01” ~ “ch05”
public void doMessage(byte[
] ch, int chlen, byte[ ] data, int datalen):
- 當車機 (Data Generator) 透過 Channel “ch01” 到
“ch05”傳資訊給 iPush® Server 時,因為有 Subscribe
“ch01” 到 “ch05” 的緣故,API 會自動呼叫此 Function,並將相關資訊傳入
- 當收到來自車機的資訊時,呼叫 updateCarData(car)
來更新每個車機的目前狀態 (定義於 class CarData),並顯示即時資訊
- 在更新完車機目前狀態後,呼叫 repaint(),將所有目前車輛的位置移動到最新位置
您可以視需要自行修改此 Java 原始碼
打開記事本程式,開新檔案,鍵入下列 HTML 原始碼 (您可以 Copy-Paste
複製之):
<html>
<head>
<nomal>艾揚虛擬車隊即時監控</nomal>
<meta http-equiv="Content-Type" content="text/html; charset=big5">
</head>
<body>
<p align="center"><font color="#6600FF" size="+1">艾揚虛擬車隊即時監控
-- <font color="#FF0000">範例實作</font> </font><br>
<APPLET CODE="demo.class" width=950 height=600 CODEBASE="."
ARCHIVE="iceipush_utils.jar">
<PARAM NAME = port VALUE ="8000">
<PARAM NAME = company VALUE ="ICE">
<PARAM NAME = product VALUE ="ICE">
<PARAM NAME = user VALUE ="monitor">
<PARAM NAME = password VALUE ="monitor">
<PARAM NAME = channel VALUE ="ch01-5">
<PARAM NAME = LUX VALUE ="1213033.8">
<PARAM NAME = LUY VALUE ="250211.4">
<PARAM NAME = RDX VALUE ="1213207.6">
<PARAM NAME = RDY VALUE ="250102.4">
<PARAM NAME = mapWidth VALUE ="800">
<PARAM NAME = mapHeight VALUE ="600">
</APPLET>
</p>
</body>
</html>
然後將此檔案存為 c:\ipushdemo\ipush_its.html。這是一個簡單的
HTML 檔案,其中包含一個我們剛剛才編譯完的 Java Applet Class “demo.class”,此
Java Applet Class 有一些參數輸入。其中 ”port”,
“company”, “product”, “user”, “password” 為 iPush Server
的連線資訊 (因為 Java Applet 的特性,只能與 Applet 所在的系統連線,故此處不必指定 IP address)。
其他參數解釋如下:
channel: 此 Java
Applet 要向 iPush® Server 訂閱 (Subscribe) 的 Channel,在此為
“ch01”~”ch05”
LUX,LUY:背景台北市街道圖最左上角的經緯度座標
RDX,RDY:背景台北市街道圖最右下角的經緯度座標
mapWidth,mapHeight:背景台北市街道圖的寬度和高度
到目前為止,整個系統已設計完成,接下來我們要將所有相關檔案上傳至 Web Server
來執行 (因為 Java Applet 的安全性限制,和網路連線有關的 Java Applet 必須放在 Web Server
上才能執行,而且此 Web Server 和 iPush® Server 必須裝在同一台機器上。此範例實作我們以
Microsoft IIS Server 作為 Web Server (在安裝 iPush®
Server for Windows 的過程中,我們已經安裝了 IIS Server)。
接著我們上傳剛才所編輯的 HTML file,編譯過的 Java Applet 與相關檔案
至 IIS Server,我們將所有相關檔案上傳至 IIS Server 的
c:\ipushdemo 目錄下,需要上傳 5 個檔案如下:
ipush_its.htm:即時車隊監控主網頁
demo.class:即時車隊監控的主程式
(Java Applet) 之一
CarData.class:即時車隊監控的主程式
(Java Applet) 之一
iceipush_utils.jar:包含
iPush® Java Package API 的 Library
demo.jpg:台北市街道圖
上傳後請將 c:\ipushdemo
目錄設為 Web 共用 如下:

恭喜您!到目前為止,所有的步驟均已完成,我們來執行看看是否可以正常運作。在執行之前,請記得下列動作是否完成:
- iPush® Server 已經啟動
- Data Generator 執行中
接下來,請打開 IE 瀏覽器測試一下,看是否可以用 http://your-web-server-ip/ipushdemo/ipush_its.htm
來存取車隊即時監控的網頁,您應該可以看到即時變化的五個車機資訊,與不斷移動的車子標誌了,如下圖所示:

再一次恭喜你成功地完成此範例,並體驗到快速應用 iPush®
Server 於 Internet 即時車隊監控的容易。若是還有任何的問題,歡迎與下列人員聯繫:
技術支援:Tel: +886-2-23961880 Ext. 66 E-Mail: support@icetech.com.tw
夥伴/業務:Tel: +886-2-23961880 Ext. 62 E-Mail:
eric@icetech.com.tw
|