Node.js速学之-Socket.IO

参考文献:[1][EN]Georgo Ornbo.傅强.陈宗斌. Node.js入门经典[M]. 北京:人民邮电出版社.2013.4-1

Socket.IO是Node.js的一个模块,提供通过WebSocket进行通信的一种简单方式。
相关技术:
Ajax 让开发者无需刷新WEB页面即可从服务器请求数据。
WebSocket: 服务器和浏览器之间保持连接持久打开,快速传输数据;但是不支持重新链接处理或心跳功能。

一、安装Socket.IO
安装命令:npm install socket.io
二、监听Socket.IO连接
index.html代码:

    
    

node.js端

var http = require('http'),
    fs = require('fs');

var server = http.createServer(function (req, res) {
    fs.readFile('./index.html', function(error, data) {
        res.writeHead(200, { 'Content-Type': 'text/html' });
        res.end('Hello World', 'utf-8');
    });
}).listen(3000, "127.0.0.1");
console.log('Server running at http://127.0.0.1:3000/');

var io = require('socket.io').listen(server);

io.sockets.on('connection', function (socket) {
    console.log('User connected');
    socket.on('disconnect', function () {//不能改为io.socket
        console.log('User disconnected');
    });
});

三、服务器给客户端发送数据
Node.js代码

var http = require('http'),
    fs = require('fs');

var server = http.createServer(function (req, res) {
    fs.readFile('./index.html', function(error, data) {
        res.writeHead(200, { 'Content-Type': 'text/html' });
        res.end(data, 'utf-8');
    });
}).listen(3000, "127.0.0.1");
console.log('Server running at http://127.0.0.1:3000/');

var io = require('socket.io').listen(server);

io.sockets.on('connection', function (socket) {
    console.log('User connected');
    socket.emit('message',{text:'You have connected'});
    //socket.broadcast.emit('message',{text:'A new Text'}); 广播数据给所有已连接客户
    socket.on('disconnect', function () {
        console.log('User disconnected');
    });
});

index.html代码


    

Socket.IO Example

四、服务端实时发送数据给客户端(实时计数器)
Node.js代码

var http = require('http'),
    fs = require('fs');
var count = 0;
var server = http.createServer(function (req, res) {
    fs.readFile('./index.html', function(error, data) {
        res.writeHead(200, { 'Content-Type': 'text/html' });
        res.end(data, 'utf-8');
    });
}).listen(3000, "127.0.0.1");
console.log('Server running at http://127.0.0.1:3000/');

var io = require('socket.io').listen(server);

io.sockets.on('connection', function (socket) {
    count++;
    console.log('User connected. '+count+' user present');
    //console.log('User connected');
    socket.emit('users',{number:count});
    socket.broadcast.emit('users',{number:count}); //广播数据给所有已连接客户
    socket.on('disconnect', function () {
        count--;
        console.log('User disconnected');
        socket.broadcast.emit('users',{number:count});
    });
});

index.html 代码:


    

五、浏览器和服务器双向实时通信
浏览器给服务器发数据方法:

socket.emit('message',{text:meaage.value});

服务器给接收数据方法:

socket.on('mesage',function(socket){
socket.on('mesage',function(data){
  });
})