Socket.io


メッセージ交換


backendsocket.on(방이름: string , function)frontendからemitに渡される3番目のパラメータのコールバックは、frontend上で実行されるバックグラウンドで呼び出すことができます.
frontendsocket.emit(방이름: string , object, function)Emitは、任意のタイプの任意の数のパラメータを渡すことができます.ただし、functorはパラメータの最後にある必要があります.

チャットルーム


チャットルームに入る

socket.join(방이름) socket.join([방1, 방2])

特定のチャットルームにメッセージを送信

socket.to(방이름).emit()

チャットルームを出る

socket.leave(방이름)

すべての参加者(socket)にメッセージを送信

wsServer.sockets.emit()

disconnecting


部屋との接続が完全に切断される前に発生したイベント.socket.rooms存在するすべての放牧記録をSetタイプに戻す
socket.on("disconnecting", () => {
	socket.rooms.forEach((room) => socket.to(room).emit("bye"));
});

すべてのイベントを表示

socket.onAny(event, ()=> { console.log(event)})

強制的に入る


すべての参加者をroom 1に移動wsServer.socketsJoin(room1)room 1の参加者をroom 2とroom 3に入れるwsServer.in(room1).socketsJoin([room2, room3])

Adapter


リアルタイムアプリケーションの役割を異なるサーバ間で同期します.wsServer.sockets.adapter

sids:存在するすべての個人室

wsServer.sockets.adapter.sids

部屋:すべての存在するチャットルーム(個人部屋sidsと公開部屋を含む)

wsServer.sockets.adapter.roomsSidsもroomもmapタイプ
公開ルームタイトルのコードのみ取得
const { sockets: { adapter: { sids, room } } } = wsServer;
const publicRooms = [];
// Map을 forEach 돌리면 forEach의 매개변수는 forEach(value, key)가 된다

// Map.get(key) => value를 리턴 
rooms.forEach((value, key) => {
	// if 개인방이 존재하지 않는다면 , 즉 공개방이라면  
	if(sids.get(key) === undefined) {
    	publicRooms.push(key);
    }
});

特定のチャットルームのユーザー数


roomはMapオブジェクトであり、roomの値はSetオブジェクトであるため、SetはSetのサイズである.sizeは、特定のroomNameのサイズを表します.wsServer.sockets.adapter.rooms.get(roomName)?.size

リアルタイム変更履歴の表示


wsServer.on("connection", (socket) => {
wsServer.sockets.emit("room_change", publicRooms());
});

admin panel


1)取付後https://admin.socket.io接続
2)サーバURLを내도메인/adminに設定