利用 egg-socket.io 内置的 socket.io-redis 集群部署socket服务

socket.io

Socket.IO 是一个基于 Node.js 的实时应用程序框架,在即时通讯、通知与消息推送,实时分析等场景中有较为广泛的应用。


文章目录

  • socket.io
  • 前言
  • 一、介绍配置
  • 二、使用步骤
    • 1.准备
    • 2.测试


前言

当一台单机的socket服务无法支撑其业务时 我们需要集群部署实现

请结合egg-socket.io 来阅读
链接


一、介绍配置

先看下配置文件 config文件夹下

// {app_root}/config/config.${env}.js
exports.io = {
  init: { }, // passed to engine.io
  namespace: {
   // 分别为 连接不同命名空间时 配置不同的中间件
    '/': {
      connectionMiddleware: [],
      packetMiddleware: [],
    },
    '/example': {
      connectionMiddleware: [],
      packetMiddleware: [],
    },
  },
  //配置socket-adapter 的适配类型
  redis: {
      host: '',
      port: 6379
    }
};

当socket连接过多,需要集群部署时 请选择redis作为其适配器

egg-socket.io 内部集成了 socket.io-redis,当配置文件使用redis时 会将redis 默认作为其适配源

利用 egg-socket.io 内置的 socket.io-redis 集群部署socket服务_第1张图片
利用了redis 管道的订阅 发布的功能 实现了消息同步
利用 egg-socket.io 内置的 socket.io-redis 集群部署socket服务_第2张图片
单机
利用 egg-socket.io 内置的 socket.io-redis 集群部署socket服务_第3张图片

二、使用步骤

1.准备

node 环境 以及redis服务

代码如下(示例):
写了个简单的html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>socket.io演示客户端</title>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/socket.io/2.1.1/socket.io.js"></script>
</head>
<body>
<h1>socket.io演示客户端</h1>
<input type="text" placeholder="发送消息" id="roomId"><button>发送</button>
<div>
    <button id="loginout">退出</button>
</div>
<div id="word">
</div>
</body>
<script>
    $=function (id) {
        return document.getElementById(id);
    };
    const room = 'wasteHome' //Math.random().toFixed(3)*1000
    const userId = Math.random().toFixed(3)*1000
    var socket = io.connect(`127.0.0.1:7001/wasteHome?userId=${userId}&room=`+room);
    var setRoom = document.getElementsByTagName("button")[0],
        msg = $("msg"),
        word = $("word"),
        toRoom=$("toRoomId"),
        loginOut=$("loginout");
    setRoom.onclick=function(){
        socket.emit('sayHi',{
            userId,
            room:'wasteHome',
            payload: {
                msg : '我是kd来自'+room+'房,编号是===='+userId,
            },
        });
    };
    loginOut.onclick = ()=> {
        alert('我退出了')
        socket.disconnect();
    }

    // 当收到对方发来的数据后触发 message 事件
    socket.on('message',function (data) {
        console.log('收到了==========',data)
        word.innerHTML+="

"+data+"

"
; }); socket.on('online',function (data) { alert(data.message) console.log('我上线了==========',data) }); socket.on('leave',function (data) { alert(data.message) console.log(33333) }); </script> </html>

2.测试

略。。。

你可能感兴趣的:(websocket)