在Node.js和Express框架上添加socket.io支持

                                 在Node.jsExpress框架上添加socket.io支持

                    参考:http://blog.csdn.net/zzwwjjdj1/article/details/52149438

 

0、前提:搭建了基于Node.js+ExpressHttp/Https项目

    关于如何搭建Node.js+ExpressHttp/Https项目,参考以下链接:

    http://blog.csdn.net/xingyanchao/article/details/79362443

1、安装socket.io模块

    (1)进入cmd窗口,cd到项目所在目录

    (2npm 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) 合理、高效、松耦合的消息处理流程设计



你可能感兴趣的:(node.js)