COMET的一些探討
Intro
Comet這個詞出自於 Dojo 作者 Alex Russell 在 2006/3/3 發表的Comet: Low Latency Data for the Browser 。簡單來說就是讓 Browser 跟 Server 作一個長時間不斷線的連線,然後我們要在 Web 撰寫 Rich Client 的程式就相當的容易。[1]
Benefit
Comet 的好處是不用像 Polling 一樣耗費太多不必要的頻寬,壞處是 Web Server 架構要修改程式成 Comet 的運作方式,在Browser 部份也有問題要修改,因為 IE 不下載完成就不顯示網頁,必須使用 iframe 或是 Flash 來幫忙做到抓取即時資料的任務。
市場
目前使用 Comet 技術比較知名公司已經有
Comet的種類
技術介紹
Node.js是建築在Google Chrome所開放原始碼的V8 JavaScript引擎上,是目前最快速的JavaScript處理引擎之一,以non-blocking的概念作為基礎(與Nginx雷同),提供相對於一般網頁伺服器(像是Apache)更快速的request處理效能。[3]
瀏覽器的 JavaScript 與實現 CommonJS 規範的 NodeJS 有何不同呢?瀏覽器的 JavaScript 提供 XMLHttpRequest ,讓程式可以和網頁伺服器建立資料傳輸連線,但這通常隻能適用於網站開發的需求,因為我們隻能用 XMLHttpRequest 與網頁伺服器通訊,卻無法利用它建立其他類型如 Telnet / FTP / NTP 的伺服器通訊。如果我們想開髮網路服務程式,例如 SMTP 電子郵件伺服器,就必須使用 Sockets 建立 TCP (某些服務則用 UDP) 監聽及連線,其他程式語言如 PHP 、 Java 、 Python 、 Perl 及 Ruby 等,在標準開發環境中皆有提供 Sockets API ,而瀏覽器的 JavaScript 基於安全及貼近網站設計需求的考量下,並未將 Sockets 列入標準函式庫之中。 CommonJS 的規範填補這種基礎函式庫功能的空缺,遵循 CommonJS 規範的 NodeJS 可以直接使用 Sockets API 建立各種網路服務程式。
目前Server Push技術我們鎖定在國外最熱門,而且彈性最大的NodeJS上 下一篇會討論NodeJS的技術討論
[1]淺談 Comet PUSH Server 架構 http://lightyror.thegiive.net/2007/06/comet-push-server.html
[2]Browser 與 Server 持續同步的作法介紹 (Polling, Comet, Long Polling, WebSocket http://www.josephj.com/entry.php?id=358
[3]Node.js 究竟是什麼?http://www.ibm.com/developerworks/cn/opensource/os-nodejs/index.html?ca=drs
[4]nodejs異步IO的實現 http://cnodejs.org/blog/?p=244
[5]nodeJS 介紹http://wiki.nodejs.tw/nodejs_from_scratch/introduction
[6]Ajax Push Engine http://www.ape-project.org/demos/
[7]http://www.stream-hub.com/
Comet這個詞出自於 Dojo 作者 Alex Russell 在 2006/3/3 發表的Comet: Low Latency Data for the Browser 。簡單來說就是讓 Browser 跟 Server 作一個長時間不斷線的連線,然後我們要在 Web 撰寫 Rich Client 的程式就相當的容易。[1]
Benefit
Comet 的好處是不用像 Polling 一樣耗費太多不必要的頻寬,壞處是 Web Server 架構要修改程式成 Comet 的運作方式,在Browser 部份也有問題要修改,因為 IE 不下載完成就不顯示網頁,必須使用 iframe 或是 Flash 來幫忙做到抓取即時資料的任務。
市場
目前使用 Comet 技術比較知名公司已經有
- GMail's GTalk integration
- Jot Live
- Renkoo
- cgi:irc
- Meebo
Comet的種類
- 輪詢 – Polling (每隔幾秒詢問server)
- 保持連線 - Comet (Server 端的 Polling)
- Long Pulling 發一個長時間等待的 Request (NOW)
- WebSocket (未來之星) (HTML5[目前僅CHROME支援] 、NodeJS可透過module完成)
技術介紹
- Ajax Push Engine (APE) APE (Ajax Push Engine)
socket.onRead = function(data) {
Ape.log("Data : " + data);
if (chan) {
//向Channel裏發送數據,所有join用戶都能收到
chan.pipe.sendRaw('CUSTOM_RAW', JSON.parse(data), {'from': 'sserver'});
} else {
return ['109', 'UNKNOWN_PIPE'];
}
}
客戶端要建立事件產生的程式碼
pipe.request.send('getst', {'pipe': 'testChannel'});
console.log('Sending Hello world');
});
//接收數據
client.onRaw('CUSTOM_RAW', function(raw, pipe) {
var cell1=document.getElementById("sp");
cell1.innerHTML=JSON.stringify(raw.data);
});
});
更多請參閱官網[6]- Node JS
Node.js是建築在Google Chrome所開放原始碼的V8 JavaScript引擎上,是目前最快速的JavaScript處理引擎之一,以non-blocking的概念作為基礎(與Nginx雷同),提供相對於一般網頁伺服器(像是Apache)更快速的request處理效能。[3]
瀏覽器的 JavaScript 與實現 CommonJS 規範的 NodeJS 有何不同呢?瀏覽器的 JavaScript 提供 XMLHttpRequest ,讓程式可以和網頁伺服器建立資料傳輸連線,但這通常隻能適用於網站開發的需求,因為我們隻能用 XMLHttpRequest 與網頁伺服器通訊,卻無法利用它建立其他類型如 Telnet / FTP / NTP 的伺服器通訊。如果我們想開髮網路服務程式,例如 SMTP 電子郵件伺服器,就必須使用 Sockets 建立 TCP (某些服務則用 UDP) 監聽及連線,其他程式語言如 PHP 、 Java 、 Python 、 Perl 及 Ruby 等,在標準開發環境中皆有提供 Sockets API ,而瀏覽器的 JavaScript 基於安全及貼近網站設計需求的考量下,並未將 Sockets 列入標準函式庫之中。 CommonJS 的規範填補這種基礎函式庫功能的空缺,遵循 CommonJS 規範的 NodeJS 可以直接使用 Sockets API 建立各種網路服務程式。
var http = require('http');
http.createServer(function (req, res) {
res.writeHead(200, {'Content-Type': 'text/plain'});
res.end('Hello World\n');
}).listen(1337, "127.0.0.1");
console.log('Server running at http://127.0.0.1:1337
nodeJS 介紹[5]- StreamHub (The Reverse Ajax / Comet Server)
var hub = new StreamHub();
hub.connect("http://localhost:7979/streamhub/");
hub.subscribe("/channel", function (sTopic, oJsonUpdate) {
alert("Received an update on topic " + sTopic);
alert("Contents: " + oJsonUpdate['field1']);
});
伺服端
var hub = new StreamHub();
hub.connect("http://localhost:7979/streamhub/");
hub.publish("/channel", "{'field1':'value1','field2':'value2'}");
目前Server Push技術我們鎖定在國外最熱門,而且彈性最大的NodeJS上 下一篇會討論NodeJS的技術討論
[1]淺談 Comet PUSH Server 架構 http://lightyror.thegiive.net/2007/06/comet-push-server.html
[2]Browser 與 Server 持續同步的作法介紹 (Polling, Comet, Long Polling, WebSocket http://www.josephj.com/entry.php?id=358
[3]Node.js 究竟是什麼?http://www.ibm.com/developerworks/cn/opensource/os-nodejs/index.html?ca=drs
[4]nodejs異步IO的實現 http://cnodejs.org/blog/?p=244
[5]nodeJS 介紹http://wiki.nodejs.tw/nodejs_from_scratch/introduction
[6]Ajax Push Engine http://www.ape-project.org/demos/
[7]http://www.stream-hub.com/
留言