Socket.io
5242 ワード
メッセージ交換
backend
socket.on(방이름: string , function)
frontendからemitに渡される3番目のパラメータのコールバックは、frontend上で実行されるバックグラウンドで呼び出すことができます.frontend
socket.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.rooms
Sidsも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
に設定Reference
この問題について(Socket.io), 我々は、より多くの情報をここで見つけました https://velog.io/@jeajea0127/Socket.ioテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol