socket.io のすべての発行をグローバル配列に格納して、新しいユーザーが Web サイトに参加したときに発行をループして、現在の「キャンバス描画」の場所を取得できるようにする方法はありますか。新しいユーザーには、すでに行われた作業を確認してから、共同作業してもらいたいと考えています。
これに向けてアプローチできる他の方法はありますか?
socket.io のすべての発行をグローバル配列に格納して、新しいユーザーが Web サイトに参加したときに発行をループして、現在の「キャンバス描画」の場所を取得できるようにする方法はありますか。新しいユーザーには、すでに行われた作業を確認してから、共同作業してもらいたいと考えています。
これに向けてアプローチできる他の方法はありますか?
サーバーの実行中にエミットを保存するだけの場合は、モジュール レベルの配列を宣言し、各エミットをその配列にプッシュするだけです。その後、そのサーバーの実行中にいつでも、アレイを参照できます。
サーバー呼び出し間でエミットを保存する場合は、それらを永続的なストレージ (ファイル、データベースなど) に保存する必要があります。
// save incoming data from one particular message
var emitsForSomeMessage = [];
io.on("someMessage", function(data) {
// save the incoming data for future reference
emitsForSomeMessage.push(data);
});
または、すべての発信データを保存しようとしている場合は.emit()
、そのメソッドをオーバーライドして、送信されたものを保存できます。
var outgoingEmits = [];
(function() {
var oldEmit = io.emit;
io.emit = function(msg, data) {
outgoingEmits.push({msg: msg, data: data});
return oldEmit.apply(this, arguments);
};
})();
送受信されるメッセージは多数あるため、独自のロジックを追加して、どのメッセージを配列に保存するかどうかを決定できます。