在Node.js和Express框架上添加socket.io支持
参考:http://blog.csdn.net/zzwwjjdj1/article/details/52149438
0、前提:搭建了基于Node.js+Express的Http/Https项目
关于如何搭建Node.js+Express的Http/Https项目,参考以下链接:
http://blog.csdn.net/xingyanchao/article/details/79362443
1、安装socket.io模块
(1)进入cmd窗口,cd到项目所在目录
(2)npm install socket.io
2、服务器端添加socket.io支持
(1)最简单的方法,就是在bin/www中添加socket.io支持
① 引用socket.io模块:var socketio = require('socket.io');
② 在https.createServer()之后添加:
var io = socketio.listen(server); // 启动socket.io侦听
// 建立服务器接收到客户端链接(connection事件)时的处理函数
io.sockets.on('connection', function(socket) {
socket.emit('news', { hello: 'world' }); // 给该客户端发送事件
// 建立该socket上的事件处理函数(对不同事件,进行不同的处理)
socket.on('my other event', function (data) {
console.log("my other event:" + data);
});
});
(2)服务器socket.io事件逻辑一般比较复杂,最好将其独立到一个js文件中
① 创建socketio.js文件
var socket_io = require('socket.io');
var socketio = {};
// 获取io
socketio.getSocketio = function(server){ // http(s) server
var io = socket_io.listen(server);
io.sockets.on('connection', function (socket) {
console.log('连接成功');
socket.on('event01',function(){ // 处理来自客户端的’event01’事件
console.log('监听点击事件');
var datas = [1,2,3,4,5];
socket.emit('event02', {datas: datas}); // 给该客户端发送event02事件
socket.broadcast.emit('event02', {datas: datas}); // 发送给其它客户端
})
// 更多事件,就更多处理函数
// ......
})
};
module.exports = socketio;
② 修改bin/www文件
1) 引用socketio.js文件:var io = require('./socketio');
2) 在var server = http(s).createServer(...)之后添加:io.getSocketio(server);
3、客户端添加socket.io支持
(1) 修改前端网页(index.ejs)
① 在
部分添加
② 在合适的地方,发起对socket.io服务器的链接(如body末尾)
var socket = io.connect('https://localhost:3000');
socket.on('event01', function (data) {
console.log(data);
socket.emit('event02', { my: 'data client' });
});
// 继续提供处理其它events的函数...
③ 在需要的时候/地方,用socket.emit(...)发送事件给服务器(如button.click中)
(2) 在网页中添加一些互动,以反馈发送和接收到的events
4、后续研究
(1) socket.io区分不同房间的操作
(2) Socket.io服务器中数据(包括用户、白板、聊天)的存储、访问、备份、恢复等
(3) 不同数据类型的传输
(4) 合理、高效、松耦合的消息处理流程设计