Egg-socket.ioの組み込みsocket.io-redisクラスターを使用してソケットサービスをデプロイする

ソケット.io

Socket.IO は、Node.js に基づくリアルタイム アプリケーション フレームワークで、インスタント メッセージング、通知とメッセージ プッシュ、リアルタイム分析、その他のシナリオで広く使用されています。



序文

スタンドアロンのソケット サービスがビジネスをサポートできない場合は、クラスター デプロイメントの実装が必要です

リンクを読むには、egg-socket.io を組み合わせてください。


1. 構成の概要

まず、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
    }
};

ソケット接続が多すぎてクラスターのデプロイが必要な場合は、アダプターとして redis を選択してください。

Egg-socket.io は、socket.io-redis を内部的に統合しており、設定ファイルで redis が使用されている場合、デフォルトで redis が適応ソースとして使用されます。

ここに画像の説明を挿入します
Redis パイプラインのサブスクリプションおよびパブリッシュ機能を利用して、メッセージの同期を実現します
ここに画像の説明を挿入します

ここに画像の説明を挿入します

2. 利用手順

1.準備

ノード環境と 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+="<p>"+data+"</p>";
    });

    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. テスト

わずかに。

おすすめ

転載: blog.csdn.net/weixin_45485922/article/details/117782952