42

こんにちは、私はWebSocketを介してjavascriptオブジェクトを送信しようとしています。

faye-websocketsのドキュメントには次のように書かれています。

send(message) は、文字列またはバッファのいずれかを受け入れ、接続を介して他のピアにテキストまたはバイナリメッセージを送信します。

サーバー側私はノードとフェイを使用しています。

var WebSocket = require('faye-websocket');
var http = require('http');

var server = http.createServer();
server.addListener('upgrade', function(request, socket, head) {
    var ws = new WebSocket(request, socket, head);
    ws.send({topic:'handshake', data:'sdf487rgiuh7'});
});
server.listen(8000);

クライアント側:

<script>
    var ws = new WebSocket('ws://localhost:8000');
    ws.onmessage = function(e) {
        console.log(e.data); //prints [Object object] string and not the object
    };
</script>

私のエラーは何ですか?ありがとう

4

3 に答える 3

95

WebSocket は、文字列、型付き配列 (ArrayBuffer)、および Blob の送受信をサポートします。Javascript オブジェクトは、送信前に上記のいずれかのタイプにシリアル化する必要があります。

オブジェクトを文字列として送信するには、組み込みの JSON サポートを使用できます。

ws.send(JSON.stringify(object));

オブジェクトを型付き配列として送信するには、次のような JavaScript BSON ライブラリを使用できます

ws.send(BSON.serialize(object));

WebSocket メッセージを受信したら、デシリアライズする必要があります。

WebSocket メッセージから JSON 文字列を逆シリアル化するには:

ws.onmessage = function (e) {
    var object = JSON.parse(e.data);
    ...
};

WebSocket 経由でバイナリ メッセージを使用している場合は、すべてのバイナリ メッセージを型付き配列として受け取るために、まず binaryType 属性を設定する必要があります。

ws.binaryType = "arraybuffer";

次に、デシリアライズは次のようになります。

ws.onmessage = function (e) {
    var object = BSON.deserialize(e.data);
    ...
};

これは、 Javascript での BSON の使用に関するブログ投稿です。

于 2012-10-23T15:39:31.383 に答える
2

私は基本的にSocket.IOを使用していますが、サーバーでデータを文字列化し、クライアントで次のように解析する必要があるようです。

サーバー内:

ws.send(JSON.stringify({topic:'handshake', data:'sdf487rgiuh7'}));

クライアントで:

console.log(JSON.parse(e.data));
于 2012-10-23T11:00:49.437 に答える