首頁 公司 產品 產業/方案 服務 夥伴 客戶 論壇 ICE Developer Center Site Map          [搜尋]
ICE Developer Center Overview Register Training LearningSpace Workshop ICE Messaging Express MOM Glossary
Member Login Download GetLicense Support Profile iReal Program Logout

 .艾揚即時訊息技術電子週報 < ICE Messaging Weekly >. 


第 10 期 2003.03.04       本報內容由 艾揚科技 (ICE Technology Corp.) 提供

本期內容大綱

 
[編輯手扎] ICE Messaging Editor's Note 郭漢丞   

2 月 28 日,一個始於四年前的國定紀念日,對大多數人而言,除了深層的紀念意義之外,最重要的還是多了一天可以偷閒休假。我也趁著這個難得的連續假期,舉家出遊。悠閒的用過早餐後,乘著春風的腳步順勢上了高速公路,隨性所至地往風光明媚的中台灣駛去。過了泰山收費站以後,春天的氣息卻恁地一路領先,揚長而去,因為我陷入了長長的車陣,只能眼看著優雅的春風逃逸。我只能看著前車的煞車燈,機械性地交替執行同樣的動作。等我踏上台中的土地,已經是三個半小時以後的事情了,而我的心情卻早已經像燥熱的夏天了。

塞車是生活在台灣的每一個人都有過的共同經驗,過去相當嚴重,現在稍有改善,未來呢?艾揚的夥伴們相信,只要訊息傳遞的機制能夠好好發揮,就能有效分散車流,讓塞車的夢靨遠離我們,而能自由自在的駕車出遊,與春天共舞。

經歷三期特刊的洗禮,相信艾揚訊息電子週報的讀者們對於訊息供應鏈,在智慧交通系統 ( ITS )、環境監控、防災監控、工業監控、大樓保全監控等方面的應用,已經有了概念雛形。無論您是身在哪一個專業領域,如果您有「遠距、即時、多點」這三項訊息傳遞的需求,您都應該參考 Push Technology 與 ICE M2M 的技術架構,透過專業的訊息傳遞技術架構,解決所有與訊息傳遞相關的問題,讓您可以專注於商業模型的建構上。而最重要的,是在開發新的商業應用軟體的同時,您還可獲得艾揚的訊息技術團隊的支援。

在 2 月 26 日由艾揚舉辦的「新世代遠距/即時/多點訊息擷取與傳遞技術架構」研討會中,艾揚揭開「訊息供應鏈」的神秘面紗。沒能趕上報名的讀者們,歡迎上網直接下載 (http://www.icetech.com.tw) 研討會相關講義資料。

在往後電子週報的內容中,我們將持續闡述即時訊息技術的概念與應用實作,本期就先由主筆蔣居裕的「技術篇:與 Developer 息息相關的 iPush API (上)」開始,以提供眾多 Developer 具有啟發性的觀點。

透過電子週報與眾 Developer 對話,並非期待在實質商業利益上有所斬獲,而是純粹以共同分享與研討,讓訊息傳遞的處理架構能夠帶來接近完美的工作效率。若能夠在軟體發展思考方向上,帶給諸位讀者一絲啟發,那就是電子週報全體工作同仁的最大回報了。

真願艾揚即時訊息技術電子週報,能為您盡一份心力。

 
[訊息論壇] ICE Messaging Forum   蔣居裕

技術篇:與 Developer 息息相關的 iPush® API (上)

對於 Software Developer (應用程式開發者) 來說,除了伺服器端軟體外,一個中介軟體 (Middleware) 產品最重要的,即是在客戶端使用的 API (應用程式開發介面) 了。

iPush® Server 也是這樣的,它具備了多種 API ─ 如 Windows DLL、ActiveX、Java Package、Linux C Library 等,可供 Developer 自由選用。

iPush® API 的角色

對於即時訊息應用系統的 Developer 而言,iPush® API 扮演著下列角色:

  • 是 Developer 撰寫的應用程式對 iPush® Server 收送訊息的橋樑。也就是說,iPush® API 封裝了 iPush® Server 底層的通訊協定,而只提供了較易懂、高層次的函式呼叫介面 (High-level Function Call),供 Developer 設計的應用程式叫用,以便收發即時訊息。

  • 是 iPush® Server 特性的具體實踐者。也就是說,iPush® Server 被設計成為一個容易使用的即時鉅量連線訊息中介軟體 (Massive Connection MOM),必須將其系統設計理念,體現在 Developer 直接使用的 API 上,在應用程式撰寫的函式呼叫中,讓 Developer 實際體會得到其精神。

 

 

iPush® API 的最大特色

若要用一句話來描述 Developer 用來撰寫即時訊息應用系統的 iPush® API,那麼應該就是:

直覺、易上手

iPush® API 的高直覺性,表現在訊息的發送與訊息的接收上。以 ActiveX API (iPushX.ocx) 為例,全部呼叫介面 (Methods) 只有 11 個,列出如下:

iPush® ActiveX Methods 簡述
ipushConnect() 讓應用程式與 iPush® Server 連線。
ipushDisconnect() 讓應用程式與 iPush® Server 中斷連線。
ipushSend(LPCTSTR strChannel, LPCTSTR strData) 發送純文字 (Text) 訊息至 iPush®Server,並指定所屬 Channel (訊息發送者)。
ipushSendBin(LPCTSTR channel, const VARIANT FAR& data, long datalen) 發送二進位 (Binary) 訊息至 iPush® Server,並指定所屬 Channel (訊息發送者)。
ipushSendBlock(LPCTSTR channel, LPCTSTR name, const VARIANT FAR& data, long datalen) 發送超過 1024 Bytes (1 KB) 的訊息至 iPush® Server,並指定所屬 Channel (訊息發送者)。
ipushSub(LPCTSTR strParam) 向 iPush® Server 訂閱指定的 Channel (訊息接收者)。
ipushUnsub(LPCTSTR strParam) 向 iPush® Server 取消訂閱指定的 Channel (訊息接收者)。
packData(const VARIANT FAR& dest, long destlen, const VARIANT FAR& src, long srclen) 發送訊息至 iPush® Server 時,使用編碼運算法則 1 (訊息發送者)。
packBlock(const VARIANT FAR& dest, long destlen, const VARIANT FAR& src, long srclen) 發送訊息至 iPush® Server 時,使用編碼運算法則 2 (訊息發送者)。
unpackData(const VARIANT FAR& dest, long destlen, const VARIANT FAR& src, long srclen) 接收來自 iPush® Server 的訊息時,使用運算法則 1 來解碼;與 packData() 配對使用 (訊息接收者)。
unpackBlock(const VARIANT FAR& dest, long destlen, const VARIANT FAR& src, long srclen) 接收來自 iPush® Server 的訊息時,使用運算法則 2 來解碼;與 packBlock() 配對使用 (訊息接收者)。

以上 11 個呼叫介面,再依功能細分下去,可以單純化到 4 類:

一. 連線類:

  • ipushConnect()
  • ipushDisconnect()

二. 訊息發送類:

  • ipushSend()
  • ipushSendBin()
  • ipushSendBlock()

三. 訊息訂閱(接收)類:

  • ipushSub()
  • ipushUnsub()

四. 訊息編碼/解碼類:

  • packData()
  • packBlock()
  • unpackData()
  • unpackBlock()

→ 直覺性的訊息發送動作

所以當 Developer 要讓應用程式進行訊息的發送,其表現在實際的呼叫介面上,會是這樣的:

< 第 1 動 ─ 讓應用程式與 iPush® Server 連線 >

將連線所需的諸屬性資訊 (Properties) 準備好,然後呼叫 ipushConnect()。

< 第 2 動 ─ 發送訊息,並指定 Channel >

與 iPush® Server 連結成功後 (應用程式收到 Event: ConnectReady),接著就可依您訊息格式(純文字或是二進位)的不同,以及大小,分別叫用適當的函式來發送訊息:

  • ipushSend():發送小於 1KB 的純文字訊息。
  • ipushSendBin():發送小於 1KB 的二進位訊息。
  • ipushSendBlock():發送大於 1KB 的純文字或二進位訊息。

除了訊息內容之外,當然您也必須在函式呼叫中,為訊息指定所屬的 Channel。

還有非常重要的一點,我們強烈建議 Developer,儘量在呼叫上述任一函式來發送訊息之前,先為您的訊息進行編碼,尤其是二進位格式的訊息,如此方可避免訊息中的部分內容,與 iPush® Server 保留字元衝突的可能性。您可視需要,選擇函式 packData() 或 packBlock(),來為訊息編碼。但請記得,在撰寫應用程式的訊息接收功能時,要記得對應叫用函式 unpackData() 或 unpackBlock() 來解碼還原訊息

< 第 3 動 ─ 中斷應用程式與 iPush® Server 連線 >

Developer 可以在第 2 動中,多次呼叫 <訊息編碼 + 訊息發送> 的函式,完成多個訊息的發送作業。最後要終止與 iPush® Server 的連線,只要呼叫函式 ipushDisconnect() 即可。

利用 iPush® Server 來發送訊息,是不是真的很直覺?就好像是您要與朋友說話,第一個動作當然是撥打電話;待接通對方後,第二個動作當然就是張家長、李家短用力地聊;說過癮了,最後再掛斷即可。

→ 直覺性的訊息接收動作

這樣的直覺反應,也表現在 Developer 要讓應用程式進行訊息的接收上,其實際的函式呼叫,是如此的類似:

< 第 1 動 ─ 讓應用程式與 iPush® Server 連線 >

將連線所需的諸屬性資訊 (Properties) 準備好,然後呼叫 ipushConnect()。

< 第 2 動 ─ 訂閱 Channel,準備接收訊息 >

與 iPush® Server 連結成功後 (應用程式收到 Event: ConnectReady ),將該應用程式要讓使用者訂閱的 Channel(s),利用 ipushSub() 函式呼叫告知 iPush® Server。

接下來,應用程式可以不必苦苦等待已訂閱 Channel 所屬的訊息到來,Developer 可以讓應用程式在等待訊息到來的時間裡,同時進行其他的邏輯處理。當訊息到來時,系統會依訊息的型態,以下列任一 Event (事件) 來告知應用程式,並帶來訊息內容與其所屬的 Channel:

  • DataReceived:收到一個小於 1KB 的純文字或二進位格式訊息。
  • SetData:收到一個小於 1KB 的純文字或二進位格式,以陣列形式攜帶內容的訊息。
  • SetData2:收到一個小於 1KB 的純文字或二進位格式,以陣列形式攜帶 Channel 與內容的訊息。
  • BlockDataReceived:收到一個大於 1KB 的訊息。

當然,若訊息內容在被發送至 iPush® Server 之前,已經被編碼處理過,那麼 Developer 就該在撰寫接收功能時,再加上叫用對應的 unpackData() 或 unpackBlock() 函式,來解碼還原訊息才對。

< 第 3 動 ─ 中斷應用程式與 iPush® Server 連線 >

Developer 可以在第 2 動中,接收多個訊息。最後要終止與 iPush® Server 的連線,只要呼叫函式 ipushDisconnect() 即可。

Developer 可以不必擔心大型訊息 (檔案) 的收發問題

iPush® API 直覺性的用法,還表現在一個地方,就是當 Developer 要傳送一個大小超過 1KB 的訊息(或檔案)時,只要告訴 iPush® API 這是一個 Block 訊息 (透過使用如 ipushSendBlock() 這個函式呼叫),那就無論訊息(或檔案)是 100KB,還是 10MB,發送端的 API ,就會自動為該訊息進行切割、傳送;然後再由訂閱接收端的 API ,自動重組還原該訊息,然後觸發一個 Event: BlockDataReceived,以告知應用程式,讓其進行後續的處理。

所以,對於 Developer 來說,除了叫用專門處理 Block 訊息的函式外,對於大型訊息(或檔案)的收發處理流程,並不會與短小的訊息有所不同,都是同樣地直覺與容易。

也難怪我們可以看到,居然有 Developer 使用 iPush® Server 來實作類似 FTP 檔案上傳與下載的功能。因為複雜的動作,都由 iPush® API 幫應用程式做完了。

Thread Safe Coding ─ 實踐 Asynchronous Programming 的必要手段

在本週報中,我們一直不斷地強調:使用訊息中介軟體,如 iPush® Server 者,配合非同步的程式設計 (Asynchronous Programming),可以讓整個應用系統,達成低耦合度 (Loosely-coupled),進而提高系統的強固性 (Robustness)。

為了讓 Developer 實作出具備這樣特性的應用系統,所以每一種 iPush® API,都會配合對應程式語言的特性,讓 iPush® API 充分支援 Thread Safe 程式設計。

所以,Developer 可以將程式設計成,用一個 Thread 來訂閱 Channels 、準備接收來自這些 Channels 的訊息;但同時,使用另外的 Threads,來執行其他的程式邏輯。

而對於發送訊息而言,由於 iPush® API 在對 iPush® Server 傳送完該訊息之後,才會返回呼叫傳送函式的應用程式 (iPush® Client),所以若訊息太大(也許也要考慮頻寬太低的情況),則應該也是要使用另外的 Threads ,來執行其他的程式邏輯。

在上述訊息接收與傳送兩種情況下,由於 iPush® API 支援 Thread Safe 程式設計,所以只要 Developer 遵循所使用程式語言的 Multi-thread 設計規則,就可以輕易撰寫出一個具高強固性的即時訊息應用系統了。

您該選擇使用哪一種平台的 iPush® API ?

雖然以上我們使用 ActiveX (OCX) 來做為 iPush® API 說明的範例,但基本上,艾揚科技完全尊重 Developer 既有的程式設計技能,以及對程式設計工具的選擇,也將這個理念貫徹在對每一種 iPush® API 的支援上。

也就是說,對於每一種可供 Developer 開發即時訊息應用程式的 iPush® API,艾揚的重視程度都是一樣的,並不會說有某一類的 API,其與 iPush® Server 之間的訊息收送運作方式,跟其他種類者有所不同。

不過,倒是可以與諸位分享的一個現象是,目前在 ICE Developer Center 即時訊息技術社群中,隱隱可以發覺一個趨勢,那就是在諸 iPush® API 中,ActiveX (OCX) 與 Java Package (Class) 被使用的機率,有越來越高的現象,而這似乎也與程式設計朝兩大架構陣營 ── .NET 與 Java 的發展呼應。另外,喜歡 C/C++ 靈活的軟體工程師們,當然還是依然有 Windows DLL 或 Linux C Library 可以選用。

簡短結論

相較於只提供單一種類,或是少數種類 API 的其他中介軟體,iPush® Server 以一種更圓融的態度,來支援跨平台的客戶端應用程式開發,所以同一個訊息,可以在同一時間,傳送給不同資訊設備的不同使用者接收。

而 Developer 在開發執行於不同資訊設備上的應用程式時,都叫用了具備相同直覺性的各類 iPush® API。

 

  • 詳細的 iPush® API 說明 (Programming Guide) 與各平台類型的 iPush® API 檔案,您都可登入 ICE Developer Center,於 Download 區下載取得
[訊息技術說文解字] ICE Messaging Glossary   陸一凡
  • Fail Over    錯誤轉介

係為系統中某一部份發生錯誤狀況時,可以將作業轉介至其他部分,以便系統得以持續正常運作的一種能力。當某一運作中之系統,其伺服器之硬體或軟體,有當機或錯誤的情況發生,導致服務停擺,無法運作時,具備 Fail Over 能力的系統,將會自動把正在執行的作業轉介至另一執行中,或是備援的伺服器上。

嚴謹的企業電腦系統,需要保持持續的運作,不容絲毫錯誤發生。而 Fail Over 是要達成 Fault Tolerance (容錯機制) 的重要功能之一。

在訊息中介軟體中,Fail Over 亦是重要的一環。設想一台訊息中介伺服器在傳輸企業重要商務資訊時,突然因系統故障而造成當機,若在此時,並沒有任何 Fail Over 機制存在,則該企業要承擔的商業損失,是無法估量的。因此訊息中介伺服器通常會有兩台以上同時運作,並採用具 Fail Over 能力的架構來進行部署,配合自動或手動的監控系統,以便可以在錯誤發生時,在最短的時間內,將正在線上執行的工作,在不同的訊息中介伺服器間移轉,並得以持續進行下去。

  • Fault Tolerance   容錯機制

係一種可有效因應電腦硬體或軟體故障的系統能力。

容錯機制又可分為好幾個不同的層次,最低的一層,是要求在平時電源中斷時,仍可保持系統的運作 (如啟動 UPS 不斷電系統)。

當然,容錯機制並不僅止於此層級。在其他的層級上,現今大部分電腦系統所採用的容錯機制,是採用 Redundancy 的原理,同時準備另一份相同的軟、硬體系統在一旁待命,當平常使用的硬體系統或操作軟體發生任何故障、停擺狀況時,該 Redundancy 系統可立即提供、接替原有的服務,而不會造成系統整體運作的停擺,以致發生損失。

[艾揚快訊] ICE Express   ICE Developer Center  

< 擠爆了!2/26「 iPush® Server 在智慧型運輸 (ITS) 與環境監控 / 防災之應用與展示」研討會已經在產、官、學界的熱烈參與中圓滿落幕。現在開放講義下載 > 

擠爆了!ICE M2M Power 系列活動之一: 2/26 「 iPush® Server 在智慧型運輸 (ITS) 與環境監控 / 防災之應用與展示」研討會已經在產、官、學界的熱烈參與中圓滿落幕。現在開放講義下載。

照片 1. 現場滿滿的來賓

照片 2. 現場展示實作於 SonyEricsson P800 JavaPhone 上的遠距監控應用實例

照片 3. 現場展示攤位與說明人員

 

 >> 講義下載

< On-line Workshop ─ GIS + Internet 即時車隊監控 Demo 與 1 小時快速實作。立即看,立即會 >

包含線上 Demo 與 How-to Step by step 快速實作兩大單元,就在 ICE Developer Center 的 On-line Workshop

 >> Go !

<「新世代即時/遠距/多點訊息擷取與傳遞技術架構」系列之二 > 

iPush® Server 在 e-Automation 之應用與展示巡迴研討會開放線上報名 (3/19-台北, 3/25-台中, 3/26-高雄)

如何運用新世代的即時訊息技術架構在工業控制 / 環境 / 防災 / 工程安全 / 大樓 / 物業 / 公共事業等監控領域,滿足遠距監控、即時訊息傳遞、跨區資料交換等需求?

艾揚將在 3/19, 3/25, 3/26,分別於台北、台中、高雄舉辦「新世代即時/遠距/多點訊息擷取與傳遞技術架構 ─ iPush® Server 在 e-Automation 之應用與展示」巡迴研討會。議程如下:

時 間 主                                         題 主 講 者
13:30~14:00 報到 並參觀現場展示 座位有限,早來佔好位
14:00~14:30 訊息供應鏈新典範-「新世代即時/遠距/多點訊息擷取與傳遞技術架構」簡介 艾揚科技
行銷長 蔣居裕
14:30~15:10 iPush® Server 在 e-Automation 領域之應用內涵 - 
工業監控、環境監測/防災、工程安全監控、大樓/物業監控、公共事業監控

艾揚科技
夥伴解決方案協理
陳育杰

15:10~15:30 Coffee Break 與現場實機展示  
15:30~16:10 iPush® Server 在 e-Automation 領域之應用實作展示 -
工業監控、環境監測/防災、工程安全監控、大樓/物業監控、公共事業監控

艾揚科技
顧問服務協理
康聖欣

16:10~16:30 Q & A

即日起,開放所有巡迴場次線上報名 >> 3/19-台北, 3/25-台中, 3/26-高雄 Seminar Register

若您覺得本期內容值得參考,請轉寄給認識的朋友或同事,為國內的訊息技術社群發展盡一份力。感謝您。 

免費試用 iPush Server,請連結 ICE Developer Center 網站:http://www.icetech.com.tw/icedc,進行 Register → Login → GetLicense → Download 作業即可。

訂閱與取消訂閱本電子週報,請連結 ICE Messaging Weekly 網站:http://www.icetech.com.tw/icedc/weekly.shtml

查閱本電子週報舊有出刊內容,請連結 ICE Messaging Weekly 網站:http://www.icetech.com.tw/icedc/weekly.shtml

 

回艾揚即時訊息技術電子週報主頁 | 上一期 | 下一期

Copyright 2002-2004, 艾揚科技股份有限公司版權所有;歡迎轉寄。
關於電子報發送有任何問題,或是欲轉載內容,請連絡 icedc@icetech.com.tw
台北市 100 羅斯福路二段 9 號 12 樓之 1 ,TEL: +886-2-2396-1880,FAX: +886-2-2396-1881

Unsubscribe >>
欲取消訂閱艾揚即時訊息技術電子週報 (ICE Messaging Weekly),請 Mail 至 icedc@icetech.com.tw
主旨註明:取消訂閱艾揚即時訊息技術電子週報 即可。



艾揚科技股份有限公司  台北市 103 承德路二段 81 號 15 樓之 1   電話:+886-2-25586101   傳真:+886-2-25586102

Copyright © 2002-2008 ICE Technology Corporation. All Rights Reserved.