Node中的Socket.IO 簡單Demo及說明


注:下面Demo的Server和Client都是純后端。 並沒有web頁面。

Server端代碼:

var express = require('express');
var app = express();
var server = require('http').createServer(app);
var io = require('socket.io')(server);

//定義變量,用來存儲socket。如果是多進程的話,那么socket可以考慮存入redis中
var socketList = {};
//客戶端連接服務器socket成功時觸發的事件;
io.sockets.on('connection', function (socket) {
    //連接成功時,告訴客戶端連接成功;可以通過send來發送信息
    socket.send({status: 1});
    //socket失去連接時觸發(包括關閉瀏覽器,主動斷開,掉線等任何斷開連接的情況)
    socket.on('disconnect', function () {
        console.log("client disconnect");
        //客戶端失去
        for (var key in socketList) {
            delete socketList[key];
        }
    });
    //接收客戶端send來的信息
    socket.on('message', function (data) {
        var areaid = data.areaid;
        //用來保存socket,鍵值為區域
        socketList[areaid] = socket;
    });
    //注意:這里是從客戶端的角度來提交事件
    //socket.broadcast.to('my room').emit('event_name', data);
});

//測試。延遲5S等客戶端連接上后發送廣播
setTimeout(broadcast,5000);

function broadcast(){
    //發送廣播測試,system為約定的廣播事件
    io.sockets.emit('system','broadcast test');
    // 向another room廣播一個事件,在此房間所有客戶端都會收到消息
    //注意:這里是從服務器的角度來提交事件
    //io.sockets.in('another room').emit('event_name', data);
}
server.listen(3000);

客戶端代碼:

var express = require('express');
var app = express();
var server = require('http').createServer(app);
server.listen(3001);

//引用的應該是socket.io-client;
var io = require('socket.io-client');
//connect函數可以接受一個url參數,url可以socket服務的http完整地址,也可以是相對路徑,如果省略則表示默認連接當前路徑。
// 與服務端類似,客戶端也需要注冊相應的事件來捕獲信息,不同的是客戶端連接成功的事件是connect。
//如果要傳參,寫法為var socket = io.connect('/',{ _query:'sid=123456'}); 服務器端取參數為var sid =socket.request._query.sid;
var socket = io.connect('http://127.0.0.1:3000');
socket.on('connect', function () {
    console.log('connect successed');
});
//socket失去連接時觸發(包括關閉瀏覽器,主動斷開,掉線等任何斷開連接的情況)
socket.on('disconnect',function(){
    console.log("server disconnect");
})
//接收服務器端send來的信息
socket.on('message', function (data) {
    //判斷服務器發來狀態是否成功
    if (data.status && data.status == 1) {
        //向服務器端發送信息,areaid(區域)為隨意造的一個guid
        socket.send({areaid: '6676AE6E-2924-11E5-82B2-005056BBC258'});
    }
});
//接收系統廣播消息
socket.on('system',function(data){
    console.log(data);
})

 Demo路徑:https://github.com/shadow88sky/socketDemo/tree/master


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM