0

socket.io のすべての発行をグローバル配列に格納して、新しいユーザーが Web サイトに参加したときに発行をループして、現在の「キャンバス描画」の場所を取得できるようにする方法はありますか。新しいユーザーには、すでに行われた作業を確認してから、共同作業してもらいたいと考えています。

これに向けてアプローチできる他の方法はありますか?

4

1 に答える 1

2

サーバーの実行中にエミットを保存するだけの場合は、モジュール レベルの配列を宣言し、各エミットをその配列にプッシュするだけです。その後、そのサーバーの実行中にいつでも、アレイを参照できます。

サーバー呼び出し間でエミットを保存する場合は、それらを永続的なストレージ (ファイル、データベースなど) に保存する必要があります。

// 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);
    };
})();

送受信されるメッセージは多数あるため、独自のロジックを追加して、どのメッセージを配列に保存するかどうかを決定できます。

于 2016-06-15T16:26:36.770 に答える