使用socket.io的使用創建一個socket.io服務器即可.但是該服務器依賴於一個已經創建的http服務器.
在http服務器運行之後,使用listen方法為該http服務器附加一個socket.io服務器.
代碼如下:
var sio=require("scoket.io");
var socket=sio.listen(server);
socket就是在server基礎上創建的一個socket.io服務器.
當客戶端與服務器端建立連接時,觸發socket.io服務的connection事件.
代碼如下:
socket.on("connection",function(socket){
});
回調函數中的socket參數是服務器端與客戶端建立連接的socket端口對象.
當接收到客戶端發送的消息時,發出socket端口對象的message事件.
代碼如下:
socket.on("message",function(msg){
});
回調函數的參數是客戶端發送的消息.
可以使用socket.send(msg)向客戶端發送一個消息.
當服務器端可客戶端的連接斷開時觸發disconnect事件.
代碼如下:
socket.on("disconnect",funciton(){
});
該回調函數不適用任何參數.
服務器端server.js代碼:
代碼如下:
var http=require("http");
var sio=require("socket.io");
var fs=require("fs");
var server=http.createServer(function (req,res) {
res.writeHead(200,{"Content-type":"text/html"});
res.end(fs.readFileSync("./index.html"));
});
server.listen(1337);
var socket=sio.listen(server);
socket.on("connection", function (socket) {
console.log("客戶端建立連接");
socket.send("你好");
socket.on("message", function (msg) {
console.log("接收到一個消息:"+msg);
});
socket.on("disconnect", function () {
console.log("客戶端斷開連接.");
});
});
創建客戶端index.html代碼:
代碼如下:
<!DOCTYPE html>
<html>
<head lang="en">
<meta charset="UTF-8">
<title></title>
<script src="/socket.io/socket.io.js"></script>
<script>
var socket=io.connect();
socket.on("message", function (data) {
console.log(data);
socket.send("消息已接受到.")
});
socket.on("disconnect", function () {
console.log("服務器端斷開連接.");
});
</script>
</head>
<body>
</body>
</html>
這段代碼:/socket.io/socket.io.js有服務器端socket.io類庫提供,不需要再客戶端實際放置一個socket.io.js文件.
在腳本文件中,首先使用io.connect()方法連接服務器端socket.io服務器.
該方法返回一個與服務器端建立連接的客戶端socket端口對象.
當接受到服務器端發送的消息時,觸發客戶端socket端口對象的message事件.
代碼如下:
socket.on("message",function(msg){
});
msg是服務器端發送的數據;
也可以使用客戶端的socket對象的send()方法向服務器端發送數據.
代碼如下:
socket.send(msg);
當服務器端斷開連接時,觸發客戶端socket端口對象的disconnect事件,
代碼如下:
socket.on("disconnect",function(){
})
這個回調函數不使用任何參數.
注意:
客戶端的消息機制與服務器端的消息處理機制是完全一致的.因為socket.io確保客戶端與服務器端共享相同的API.
運行後的結果:
當關閉浏覽器是,就斷開了與服務器的連接,此時服務器端觸發disconnect事件,客戶端斷開連接.