3

私はc#でイベントクラスを持っています:

public class AreaInterventoCreata{
    //public properties
}
var message= new AreaInterventoCreata();

このクラスのサーバー側のインスタンスを作成します。私の目的は、この種のイベントに参加しているクライアントにこの作品を伝えることです.

したがって、次のようにブローカーRabbitMQに渡しますbyte[]

var responseBody = Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(message))
responseChannel.BasicPublish(
                             "",                 // exchange 
                             properties.ReplyTo, // routingKey
                             responseProperties, // basicProperties 
                             responseBody);      // body

一部の node.js サーバーがこの種類のメッセージを購読しています:

q.subscribe(function (message) { 
    for (var i = 0; i < sockets.length; i++) {
        console.log('_sockets[' + i + '] emitted');
        sockets[i].emit(event, message);
    }
});

この node.js 自体がブラウザからの socket.io 接続を受信して​​いるため、これらのソケット (たとえば、これらのブラウザ) へのプッシュを実行できます。

sockets[i].emit(event, message);

最後に、ブラウザに次のメッセージが表示されます。

var socket = io.connect('http://localhost:8091');
socket.on('Events_AreaIntervento_AreaInterventoCreata:Events', function (data) {
    var json = Utf8.decode(data);
});

firebug を介してデータを検査すると、 として定義された数値の配列を持つオブジェクト データdata.dataです。

この数値の配列は、プロセスの最初に与えられたバイトの配列であると想定しました。この仮定は間違っていますか?

  • JavaScriptで通常のオブジェクトを操作できるようにするにはどうすればよいですか?(それを見つけた!)
  • node.js サーバー レベルで直接 json に変換する必要がありますか? それはより効率的ですか?そうするためにもっと何か?

わかりました このウェブサイトの助けを借りて(少なくともその一部)それを見つけました

var Utf8 = {
    // public method for url decoding
    decodeArray: function (utfArray) {
        var string = "";
        var i = 0;
        var c = c1 = c2 = 0;

        while (i < utfArray.length) {

            c = utfArray[i];

            if (c < 128) {
                string += String.fromCharCode(c);
                i++;
            }
            else if ((c > 191) && (c < 224)) {
                c2 = utfArray[i + 1];
                string += String.fromCharCode(((c & 31) << 6) | (c2 & 63));
                i += 2;
            }
            else {
                c2 = utfArray[i + 1];
                c3 = utfArray[i + 2];
                string += String.fromCharCode(((c & 15) << 12) | ((c2 & 63) << 6) | (c3 & 63));
                i += 3;
            }

        }
        return string;
    }
}

このように使われる

<script>
    var socket = io.connect('http://localhost:8091');
    socket.on('Events_AreaIntervento_AreaInterventoCreata:Events', function (msg) {
        var jsonString = Utf8.decodeArray(msg.data);
        alert(jsonString);
    });
</script>

しかし、クライアントで行う方が良いのか、node.jsサーバーで行う方が良いのか、node.jsサーバーで行う方法はまだありますか?

4

1 に答える 1

0

これまで RabbitMQ を使用したことはありませんが、JSON 文字列を .NET から RabbitMQ に渡す方法に問題があるようです。nodejsまたはクライアントでJSONを使用する前にUTF-8配列をデコードする必要がないため、「responseProperties」はおそらく正しくありません。

于 2012-04-17T20:00:31.680 に答える