socket.io 程式解說,解說到底socket.io 什麼東西,怎麼使用socket.io
socket.io 名稱上雖然有socket,實際上卻跟『通訊協定』的socket 有著莫大的落差,主要是整合了websocket,xhr long-polling,iframe polling等技術,讓不支援websocket 的瀏覽器也能夠體驗websocket 的感受。
socket.io 是基於node.js 的產物,它也是最適合用來編寫comet 的解決方案之一,畢竟socket.io 已經整合了前後端資料,node 後端會利用heartbeat, handsharking 的方式持續瞭解瀏覽器端是否持續連線著,同時server 端有新的response 會快速回饋於瀏覽器上。
接著看看socket.io 如何運作:
server 端程式解說,
io = require('socket.io').listen(app);
socket.io 需要監聽http server 的狀態。
接著給予觸發及監聽event ,
io.sockets.on('connection', function (socket) {
socket.emit('news', { hello: 'world' });
socket.on('my other event', function (data) {
console.log(data);
});
});
在這邊server 端有幾個設定,
client 端程式解說,
<script src="/socket.io/socket.io.js"></script>
瀏覽器端的程式,直接就編寫於index.html ,首先引入js 檔案,當然如果有檔案有自行維護可以自訂路徑。
<script>
var socket = io.connect('http://localhost');
</script>
宣告要監聽的ip 位置,在這邊預設就是localhost (本機端)。
socket.on('news', function (data) {
console.log(data);
socket.emit('my other event', { my: 'data' });
});
最後直接設定socket 要做的事情,
對照server, client 端的程式,可以發現一邊監聽,一邊觸發,同時事件名稱也可以讓使用者自行定義,發展彈性十足,同時也保留了websocket 方法,因此喜歡使用websocket 的人,也可以採用send, on response 的方式監聽、觸發事件。對於程式開發者來說,已經解決掉大部分node 自行編寫comet 所會遇到的問題,讓開發者