• 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

  • 相关阅读:
    redisTemplate写哈希表遇到的坑
    embedded-redis在单元测试中的使用
    使用Standford coreNLP进行中文命名实体识别
    字符编码和文件编码
    Elasticsearch提示low disk watermark [85%] exceeded on [UTyrLH40Q9uIzHzX-yMFXg][Sonofelice][/Users/baidu/Documents/work/soft/data/nodes/0] free: 15.2gb[13.4%], replicas will not be assigned to this node
    nginx.conf常用配置解析
    使用nginx搭建文件下载服务器
    lua连接数据库操作示例代码
    spring常见注解说明
    lua相关库安装常见问题
  • 原文地址:https://www.cnblogs.com/showtime813/p/4682559.html
Copyright © 2020-2023  润新知