参考文献:[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){ }); })