開始接觸Node.js也一陣子了,在自認為有些基礎後就開始想找一些東西自己嘗試的做看看。
以本人目前對於Node.js的認知就是他可以拿來做Web Service,於是第一個念頭出現了!!
我們來做個聊天室吧!
在找資料的過程中找到了Socket.io這個套件,使用上其實就類似我們所知道的Java Socket、C# Socket這些東西。
Socket.io的用法大致上就是利用一個字串作為事件的key,在依照所接收到的key來做相對應的動作。
說這樣還是太籠統了,馬上來看看簡單的範例。
首先是index.js
var app = require('express')(); var http = require('http').Server(app); var io = require('socket.io')(http); io.on('connection', function(socket){ socket.on('chat message', function(msg){ io.emit('chat message', msg); }); }); http.listen(process.env.PORT || 3000, function(){ console.log('listening on *:3000'); });
建立io後,當有新的Client連上Server時就會進入'connection'的callback方法,而連上的Socket就會開始監聽事件,事件的名稱就是'chat message',當socket發出'chat message'事件時就會執行所寫的程式內容,以上面為例,當觸發事件後會針對io所有的client socket發出'chat message'事件以及其後發所帶的參數。
再來是index.html,使用Soket.io記得要在網頁上增加以下的js檔案
來看看index.html中的script吧!
var socket = io(); socket.on('chat message', function (msg) { $('#messages').append($('
在client中同樣先建立socket,並建立監聽Server的'chat message'事件。
而在畫面上當form要發送時,就會利用socket.emit將事件名稱以及參數送給Server。
以上就是非常簡單的Socket.io介紹,其實就是監聽特定字串名稱事件、發送特定名稱事件,非常簡單!
簡單整理一下Socket.io的用法:
socket.on socket 監聽事件
io.emit 直接送給所有的socket
socket.emit socket 發送事件與參數
socket.broadcast.emit 發送訊息給「除了自己之外的所有socket」
以下是我自己嘗試做了聊天室的Demo與Source code,提供給大家參考。
Source code: http://github.com/howard10335/ChatRoom
目前有的功能:
•Broadcast a message to connected users when someone connects or disconnects
•Support for unique nicknames
•Append the message directly as soon as he presses enter
•Show {user} is typing
•Show who’s online
•Private messaging
•Save current messages(for Chrome)
剩下如果有閒有想法的時候再擴充他吧!
沒有留言:
張貼留言