首頁 公司 產品 產業/方案 服務 夥伴 客戶 論壇 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 >. 

第 62 期 出刊日期:2004.03.09 本報內容由 艾揚科技 (ICE Technology Corp.) 提供

在 VB 上利用 iPush® 開發 Internet 即時訊息工具 (下)

本期內容大綱

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

上課鐘響了

吃 IT 這行飯還真是不簡單,總是得要不斷的學習、學習、再學習。平常很喜歡看日本台的「達人」報導,就是會跟您說很多奇聞軼事的節目。

有些「達人」一輩子都用同樣的方法來製作頂級產品,像是連續燒上將近一個星期的備常炭、火溶岩鹽,或是用掉半年時間細膩縫製的西陣錦織,也有遵古法手工釀造的乾醇醬油,這些東西都很令人嚮往,也佩服「達人」們用上一輩子的時間來完成心目中的絕頂極致。

不過吃 IT 這行飯的人可不能這樣,誰敢說我只要學一種程式語言,窮畢生之力研究,就可以變成「IT 達人」?真要這麼做,恐怕在 RD 部門呆不到兩年就要被老闆「終結」掉。

老闆們的需求總是跟著生意在走,做生意可就沒有「遵循古法」這件事,這年頭部門要是不喊出個創新的口號,老闆恐怕會質問:你們都沒有為公司想到未來的方向嗎?

像菲奧莉娜 (HP 現任總裁) 就打出了要把 HP 變成 Home Party,讓 HP 走入您的生活當中,而不只是停留在您辦公桌和書房裡的冰冷電腦,這個點子就讓外界對 HP 產品的銷售量多了好幾倍的想像。

創意要靠點天分,咱們未必能夠像菲奧莉娜一般,想出一下子就能提昇公司獲利願景的 idea,不過在 IT 業界打混,隨時隨地充電、加油,倒是補充創新養分的必要手段。

不管是軟體或是硬體的正式課程,其實都有點枯燥,最近幾年來專業的訓練機構與課程已經好多了,儘管主題硬梆梆的,上課起來講師們還是會想辦法讓學員眉飛色舞,大概這些講師以前也上過許多枯燥乏味的 IT 課程,所以也學會了不讓學員打瞌睡的妙方。

上課鐘響了,IT 人,您已經想好該如何為 2004 年第一季充個電了嗎?請別錯過三月底艾揚為您準備的知識大餐 ── iPush® Server V2 Basic & Advanced Programming Workshop。

 
[訊息論壇] ICE Messaging Forum    塗能宇 / 郭漢丞

<實作篇> 在 VB 上利用 iPush® 開發 Internet 即時訊息工具 (下)

我們完成上了禮拜的設定操作之後,接下來您只要動動滑鼠,跟著步驟將所附文字檔中的內容一一複製到表單中,就可以完成這個禮拜的實作了。

如果您已經忘記了上一期的內容,請按此連結上期文章,並進行相關檔案之下載。

處理連線及斷線

我們上期已經將 XiPush2 控制項,拖曳到表單中,現在可以開始使用此 iPush® ActiveX 元件 了。

圖一表單中的 XiPush2 控制項

一個完整的 iPush® 客戶端,必須具備傳送和接收資料的功能。接著我們就從連線部分開始處理。

我們將連線部分的資料設定,整個放在 FillLoginInfo() 中處理。它會將所有連線所需要的資料,設定到 XiPush21 控制項中。請將 FillLoginInfo() 的函式,複製到 Form.Show 函式下。

圖二處理連線所需資訊的函式 FillLoginInfo()

iPush® 提供了兩種網路連線方式:TCP 以及 UDP,我們先使用 TCP 來進行連線,並在 Command1 Connect 的 On_Click 事件,加入以下程式碼。

TCP 連線方式

TCP 提供了一個穩定的連線方式,讓資料能夠透過 Internet 正常的傳送及接收。請在 [TCP Connect] 按鈕的 Command1_Click() 事件中,加入以下的程式碼,或是將本期所附的文字檔 (code_for_weekly.txt) 打開,將相對的程式碼複製到 Command1_Click(),利用這幾行程式碼,我們就可以與 iPush® Server 建立 TCP 連線。

圖三其中 rtn 代表的是傳回的狀態值

當 rtn 傳回值大於 1 的時候,就代表連線成功,同時將連線訊息及對應的狀態碼顯示在 Label 物件中。小於 1 代表連線失敗,也會印出相對應的錯誤碼。關於訊息代碼的說明,可參閱 iPush® V2 的 ActiveX API Programming Guide (您可以在 ICE Developer Center / Download 區下載 ActiveX.zip 取得該 PDF 文件)。

斷線處理

要切斷與 iPush® Server 的連線很簡單,只要呼叫 ipushDisconnect() 就可以完成切斷連線的工作。請在 Command2 的 OnClick 事件中,加入以下程式碼。

圖四幾行就可以完成 的斷線程序

 

Channel 資料傳送與接收

連線程式完成後,我們先使用 Channel 的方式傳送資料。傳輸資料的部分實際上只有一行,就是:XiPush21.ipushSendChannelData a, b

圖五傳送的資料轉成 Variant 格式

這幾行的功用就是將 textData 的文字資料及 Channel 名稱,轉成 Variant 資料型態後送出去。 

訂閱 Channel 設定

然後我們要處理的,就是接收資料的部分。這一個部分有兩個步驟,第一步是先向 iPush® Server 訂閱 Channel。第二 步是由 iPush® Server 主動將已訂閱的即時訊息推播 (Push) 給訂閱者接收。

第一步訂閱的方式如下圖:

圖六在 Subscribe Channel 中加入的程式碼

第二步是由 iPush® ActiveX Callback 函式完成。在這個範例中,我們總共實作了三個 Callback 函式 ,分別是:

  • XiPush21_CommandMsg():使用在顯示系統連線訊息上

  • XiPush21_SetChannelData():使用在接收 Channel 資料上

  • XiPush21_SetSubjectData():使用在接收 Subject 資料上

註:一般我們是呼叫元件來幫我們完成想要完成的工作,若是元件想要主動通知程式某個事件發生時,就必須透過所謂的 Callback 方式執行 ;Callback 函式是實踐 Event-driven 軟體設計的重要手段。

圖七由 iPush® API 呼叫應用程式的 Callback 函式

 

資料回傳的 Callback 函式

所以在完整程式的最下方,所寫作的三個函式,就是提供 iPush® ActiveX API 的 Callback 函式使用 ,分別用來接收系統、Channel、Subject 所傳送的訊息。

在 SetChannelData() 這個 Callback 函式中,會回傳兩個值,分別是:

  • string 型態的 channel 資料

  • variant 型態的 data 資料

iPush® API 另外提供了一個 ipushVar2Str 函式,可以將 variant 格式的資料,轉換成 String 型態的資料。我們將 收到的訊息,顯示在 Label4 和 Label5 的內容中,Label4 顯示的是 Channel 的頻道名稱字串 (Channel ID)。請將所附範例文字檔的 Call Back 函式部分,複製到表單最下方即可。

圖八、三個 Callback 函式內容

若您需要,可以先測試連線功能,先按下工作列上的執行鍵,執行目前的程式。接著執行下載 ZIP 所附的另一個 Project1.exe 檔,開啟兩個連線程式。

圖九、開 始執行

輸入所有的連線資訊後,按下 [TCP Connect] 鈕執行系統連線的工作。由於 Channel 的分類是由 4 個 Byte 組成,所以你可以輸入 YEAH 或 ABCD 等四個 bytes 以內的資料當成 Channel 名稱。

執行 Channel 資料的傳送與接收

我們先假設要收到 channel YEAH 的資料,先在使用者 b 視窗的 channel 文字方塊輸入 YEAH 後,按下 [Subscribe Channel] 鈕。

接著在使用者 a 視窗的 data 文字方塊中輸入想傳送的資料,按下 [Send Channel] 鈕就可以完成資料傳送的工作。

圖十、 使用者 a 視窗輸入要傳送的 Channel 資料
圖十一、 使用者 b 視窗接收到的 Channel 資料

在這邊我們可以先休息一下,在處理完 channel 的訊息收送後,接下來的工作就輕鬆了。您可以泡一杯咖啡,看一下有關 UDP 的介紹,再來完成下面 Subject 訊息的收送實作。

UDP 連線的方式

相對於 TCP,UDP 是一種比較精簡的傳輸方式,在 LAN 上也許還可以,但若是要用在 Internet 上,恐怕就比較不適合 (因為大部分的 ISP 或企業網管,會阻擋 UDP 封包)。

使用 ipushUDPConnect() 來建立 UDP 連線,程式敘述跟 TCP 連線是一樣的。

圖十二和 TCP 幾乎一模一樣的敘述

將程式碼複製到 [UDP Connect] 鈕的 Command11_Click() 事件下。相關的程式碼,您只需將 ipushTCPConnect 改為 ipushUDPConnect 即可。而 iPush® 的 UDP 斷線機制,和 TCP 完全相同,所以不需要 修改即可直接套用。

Subject 資料傳送與接收

在這裡,一定很多人好奇什麼是 Subject? 一個 Subject Name 可能長得像這樣子:

ice.office.product.pm

由左到右的階層式命名,可以解釋成 ice 公司 office 裡的 product 部門的 pm 要訂閱接收這個訊息。這樣比指定一個叫 ABCD 或是 0x1f 的 Channel ID 要來得讓人容易了解。 除了比 Channel 容易了解外,Subject Name 可高達 224 Bytes 的長度,也是另外一個優點。

訂閱 Subject 資料

接下來我們要完成的,就是如何傳送及接收 Subject 定址的訊息、及實作 Subject 的 Callback 函式。

請分別雙擊 [Subscribe Subject] 與 [Unsubscribe Subject] 按鈕後,在 On_Click 事件中,分別加入以下敘述:

圖十三訂閱 Subject  程式碼
圖十四取消訂閱 Subject 程式碼也只要一行

 

接收 Subject 資料的 Callback 函式

Subject 接收訊息部分,亦是由 iPush® ActiveX Callback 函式完成的。關於 Callback 的說明,您可以參考上述 Channel 的內容。在這個範例中,Subject 訊息接收的 Callback 函式為 SetSubjectData():

圖十五XiPush21_SetSubjectData():使用在接收 Subject 訊息

我們將接收的 Subject 訊息,顯示在 Label9 標籤中。

傳送 Subject

我們使用 ipushSendNPSubjectData() 這個方法來傳送 Non-persistent Subject 訊息,而傳送的 參數主要包含兩樣:一個是 String 格式的 Subject Name,另一個是 Variant 格式的訊息內容。

接著我們就類比上述 Channel 訊息傳送做一番測試,看看是不是做好的 Subject 收送機制可以正常的運作。可以讓使用者 a (如下圖),利用 Subject ice.ipush.pm 傳送訊息給已經訂閱 ice.ipush.pm 的使用者 b:

圖十六使用者 a 利用 Subject 來傳送訊息

 

Persistent (持續性)訊息與 Durable (持久性)訂閱

接下來,我們要進入另一個主題,就是有關訊息保證送達 (Guaranteed Message Delivery) 的運作。

Durable Subscription (持久性訂閱) 是訊息中介軟體 (MOM) 於訊息保證送達規範的其中一項特性。Durable Subscription 可 以實施在 Subject Addressing 的 Pub/Sub 與 P2P 兩種訊息傳遞模式上。

訂閱者可針對某一特定的 Subject,選擇成為一般訂閱者,或是持久性的訂閱者。

Durable Subscription 相關的 iPush® 函式分別是:

  • 訂閱 Durable Subject 的 ipushSubDSubject()

  • 取消訂閱的 ipushUnsubDSubject()

當訊息發送者將 Persistent (持續性) 訊息送給 iPush® Server 時,若持久性訂閱者 楚於離線的狀態,則 iPush® Server 會將該訊息儲存起來。待下次該訂閱者再上線,並以同一 Durable Name 訂閱同一 Subject,iPush® Server 就會自動將訊息傳送給該訂閱者。

有了這樣的機制,訂閱者將不會因為離線的關係,而錯失應該接收到的訊息。在 Pub/Sub 模式下 Persistent (持續性) 訊息 發送的函式為:

  • 傳送訊息的 ipushSendPSubjectData()
傳送 Persistent (持續性)訊息

傳送 Persistent 訊息只需要使用 ipushSendPSubjectData() 就可以完成工作,不過在傳送時。還可以進一步指定 該 Persistent 訊息在 iPush® Server 上停留的時間長短 (TTL)。相關的說明,可以參見第 59 期的電子週報。若沒有特別指定,系統將會依照預設的一天時間值保存資料。

圖十七請將傳送 Persistent 訊息的方式加入 Command8_Click() 中

 

Durable (持久性)訂閱

當傳送端傳送 Persistent 訊息給 iPush® Server 時,若先前有使用者以 Durable 方式訂閱同一 Subject,不管該訂閱者是在線還是離線,該訊息都會先被儲存起來。

接收端選擇了 Durable (持久性) 訂閱,給予 Durable Name,即使是離線,還是可以在重新上線後,再次進行訂閱,就可以接取先前為其留存的 Persistent 訊息了。

我們利用 ipushSubDSubject() 來完成 Persistent 訊息的傳送:

圖十八將 Durable 訂閱的程式碼複製到 Command7_Click() 中
圖十九將取消 Durable 訂閱的程式碼加入 Command10_Click() 中

下次同一使用者再連線後,輸入與先前訂閱相同的 Subject Name 以及 Durable Name 名稱,就可以收到離線期間給他的 Persistent 訊息了。

圖二十先讓使用者 b 進行 Durable 訂閱,除了 Subject Name (subject 欄位) 外,還需加上 Durable Name (durable name 欄位)
圖二十一讓使用者 a 發送 Persistent 訊息到使用者 b 已經訂閱的 Subject

當接收端連線狀態無法確定,或是連線狀態不穩定時,就可以使用 Persistent (持續性) 傳送,以及 Durable (持久性)訂閱的方式 ,以確保資料能夠正確無誤地傳送及接收。

 



1 2 3 4 5 6 7 8 9 10
有點重要  
非常重要

 


[訊息先生信箱] Ask Mr. Message    Mr. Message  


<Developer Giga 來信詢問>

我在使用 iPush Server V1.5 SE BackOffice 的 CGI 程式 auto_adduser.php3 時,老是得到以下的錯誤訊息:

Warning: Failed to Connect in C:\Program Files\ICE Tech\wwwroot\bkosys\auto_adduser.php3 on line 47
auto_adduser [aaa:bbb] from xxx.xxx.xxx.xxx fail!!!

請問 Mr. Message 該如何解決?

<Mr. Message 的答覆>

Giga 您好,感謝您來信詢問。

會產生這個錯誤訊息,是因為您在使用 auto_adduser.php3 時,做了 MailTo 參數的指定,但執行時系統卻無法將 Mail 傳送出去。

這個情況最常見於您在安裝  iPush Server V1.5 SE 時,並未指定好 SMTP Server,於是就用預設的 localhost,而實際您的 localhost 上又沒有跑 SMTP 服務,所以 CGI 的回報郵件就傳送不出去了。

解決方法很簡單:請開啟 Windows 系統目錄 (預設為 \WINNT) 中的 php.ini,找到 [mail function] 區的 SMTP = xxx,將 xxx 改為您實際可用的 SMTP Server 主機名稱或 IP 位址,然後存檔即可。

歡迎來函詢問 Mr. Message 任何與訊息有關的技術、產品、應用、實作、商務問題,Mr. Message 必將竭誠答覆。

 go top

[艾揚快訊] ICE Express   ICE Developer Center  


<快訊一> 

Fully kernel features support: iPush V2 - Java Package API v2.3.1 (03.15)

支援最新 iPush® Server V2 的 Java Package API v2.3.1 包括以下 package:

1. iPushV2_PG_Java_v2.3.1.pdf: Programming guide for iceipush2.jar v2.3.1

     - Full kernel features support, added QoS, Connection ID

2. v2.3.1\iceipush2.jar: Java Package for ICE iPush Communcation Server V2.

3. Samples\iPush2JavaChannelSample: Sample program with channel addressing.

4. Samples\iPush2JavaSubjectSample: Sample program with subject addressing.

其他詳情,請下載 ZIP 檔後,開啟 Readme.txt 與 CHANGELIST.txt 參考之。

欲下載本 API,請先登入 ICE Developer Center,於 Download 區取得 >> Go ! 

go top

<快訊二>

Fully kernel features support: iPush V2 - Linux C Library v2.2.1 (03.04)

支援最新 iPush® Server V2 的 Linux C Library v2.2.1 包括以下 package:

1. iPushV2_PG_LinuxC_v2.2.1.pdf: Programming guide

    - Full kernel features support, added QoS, Connection ID

2. Static linking and dynamic linking library for Red Hat 6 / 7 

3. Static linking and dynamic linking library for Red Hat 8 / 9

4. Samples

其他詳情,請下載 ZIP 檔後,開啟 Readme.txt 與 CHANGELIST.txt 參考之。

欲下載本 Library,請先登入 ICE Developer Center,於 Download 區取得 >> Go ! 

go top

<快訊三>

iPush V2 Basic & Advanced Programming Workshop 教育訓練課程即將於 3/30-3/31 開跑,名額有限,請儘速報名 (03.16)

艾揚科技在 2003 年舉辦 iPush® Server V2 應用實務課程,受到學員熱烈響應,不僅座無虛席,並接受到許多熱情的建議。在 2004 年,艾揚科技推出一系列教育訓練課程的計畫,針對不同需求的 Developer 規劃不同的訓練課程。

目前規劃之課程包括金融界資訊人員期待已久的 Financial Suite SDK Workshop、艾揚最受歡迎的 iPush® Server V2 Basic Programming Workshop、為已接受過基礎訓練之學員量身訂做的 iPush® Server V2 Advanced Programming Workshop。

此外,為了加強學習效果,艾揚也不斷地修正目前教育訓現課程的內容,在進階的 iPush® Server V2 Advanced Programming Workshop 中,利用實際案例的操作來取代 AOS 以及 RDS 的課程,希望能夠透過實作,加強學員的應用能力;而 AOS 以及 RDS 為更進階之應用 Framework 課程,艾揚將另外擇期再開課,敬請期待。

課程詳細情形,請參考艾揚教育訓練網頁 >> Go !

go top

<快訊四>

強化虛擬時空與現實世界間的連結 - 即時訊息、地理資訊與自動控制技術之整合應用與實踐研討會,將於 3/17 舉行,即日起開始報名 (03.01)

以往對於如何將 GIS 與動態時序資料結合,多採取 DB-centric 的架構,雖能滿足部份需求,但在新的需求 ── 遠距監控、即時訊息傳遞、跨區資料交換、行動監控等逐漸湧現時,原有的架構將無可避免的出現資訊傳輸瓶頸,造成系統穩定度與效能都會衰減至無法忍受的程度;同時 DB-centric 的架構無法實現中控與現場即時雙向訊息交換,必須另外構建控制系統 (SCADA) 以控制現場設備。於是在諸多應用中,GIS 與自動控制形成各自獨立的區塊,無法有效的整合,系統的效益遂無從完全發揮。基於上述理由,艾揚科技推出了新世代的資訊技術架構 ── iPush® Server 結合自動控制與 GIS 的解決方案。

iPush® 即時訊息技術結合自動控制與 GIS 後,可將即時訊息力量與 GIS 所代表的空間資訊作完美的結合,同時達成現場與控制中心間的訊息流即時化、雙向化,讓 GIS 與自動控制能夠有效的整合,完全發揚系統應有的效益。

艾揚科技一直致力於即時訊息技術架構 — iPush® Server 的發展,且在 GIS 與 iPush® 結合上已於兩岸開創多起成功經驗,此次特邀國內有合作實戰經驗的夥伴親身說法。如果您有興趣更進一步了解 GIS 結合 iPush® Server 的應用與價值,請儘速報名參加本研討會。

時間:2004 年 3 月 17 日(三) 13:30~17:00
地點:洪建全文教基金會• 敏隆講堂 - 台北市羅斯福路二段 9 號 12 樓
              (捷運古亭站 6 號出口過杭州南路)

主辦單位:艾揚科技股份有限公司 (ICE Technology Corporation)

                   

議      程

時 間 主                                          題 主 講 者
13:00~13:30
來賓接待 座位有限
早來佔好位
13:30~14:10
即時訊息滾動,決策、應變、與商業價值立生 艾揚科技 行銷長
蔣居裕
14:10~15:00
即時反應、快速調度:即時訊息解決方案在警勤消防領域的應用與實踐 仲琦科技
黃國珍 經理
15:00~15:10
Coffee Break  
15:10~16:00
如何讓 GIS 產品擁有即時訊息能力:以 SuperGIS 家族為例 崧旭資訊
李宗哲 經理
16:00~16:40
Utilities Management成功經驗:GIS 與 SCADA 整合解決方案 艾揚科技
康聖欣 協理
16:40~17:00
Q&A  

線上報名 >> Go !

 


上一期精采內容:在 VB 上利用 iPush 開發 Internet 即時訊息工具 (上)


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

免費試用 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.