1

私は socket.io を使用しており、サーバーからイベントを発行し、関数をパラメーターとしてオブジェクトを渡そうとしています。これが私のコードです:

  socket.emit('customEvent', {
    name : "Test".
    myFunc : function() {
        //some logic here
    }
  });

クライアント(ブラウザの私のアプリ)で「name」プロパティにアクセスできますが、「myFunc」にアクセスしようとすると「未定義」になります。これが私のコードです

socket.on('customEvent', function(data){
    data.myFunc();
});

これに対する正しいアプローチは何ですか(可能な場合)?

4

2 に答える 2

4

データは JSON として送信されるため、関数を含めることはできません。socket.io のドキュメントで「承認」と呼ばれるものを探しているのではないでしょうか?

// server
socket.on('customEvent', function (data, fn) {
    fn(data.x)
})

// client
socket.emit('customEvent', { x: 1 }, function(){
    // ...
})
于 2013-02-09T23:28:22.797 に答える
0

関数をシリアル化できますが、一部の関数にとっては危険な方法かもしれません。しかし、socket.io は純粋な文字列または JSON として文字列のみを転送します。サーバー側から文字列を受け取ったときに、文字列関数を評価することができます。

注: 以下のコードはテストされていません。

function hello() {
  return "Hello Cruel World";
}

socket.emit('send-function', { myFunc : hello.toString() });

...

サーバー側:

socket.on('send-function', data) {
  console.log(eval(data.myFunc));
} 

このコードを試してみて、動作する場合はフィードバックをお寄せください。

于 2013-02-09T23:43:54.267 に答える