Iは、ノード/ WSのWebSocketサーバーがlistenしているすべてのクライアントに転送し、それを上、その後のRedisバックプレーン上のメッセージをリッスンし、持っている:のWebSocketは常にバッファとして文字列化されたJSONオブジェクトを送信
sub.on("message", function(channel, message) {
console.log('received message from redis: ' + message);
console.log('message is type ' + typeof(message));
var stringified = JSON.stringify(message);
console.log('stringified is type ' + typeof(stringified));
wss.clients.forEach(function each(client) {
client.send(stringified);
});
});
message
がJSONでありますオブジェクト。ログ出力は次のとおりです。クライアントで
received message from redis: {"temp":81}
message is type object
stringified is type string
、私が持っている:
socket.onmessage = function(e) {
console.log(e.data)
...
};
をログ出力は次のようになります。
{ "タイプ": "バッファ"、 "データ": [123,34,116,101,109,112,34,58,53,52,125]}
文字列が受信されないのはなぜですか?
は、サーバー上で私がハードコーディングした場合:
client.send('foobar');
その後、クライアントコードはログアウトします:
foobarに
ログ出力全体がJSON文字列になる可能性があります。クライアントで 'console.log(typeof e.data)'を試して、それが文字列であることを伝えるかどうか確認してください。また、あなたの質問のタイトルをより意味のあるものにしてください。 – jfriend00
@ jfriend00実際には、 'typeof e.data'は文字列です。私はこれをどのように処理すべきか不明です。なぜ文字列化されたJSONオブジェクトと基本文字列の間に相違がありますか?乾杯。 –
私の問題はRedisからの 'message'です。文字列ではありませんが、' console.log( 'redis:' + message);というメッセージを受け取ったとき、 'toString()'が暗黙的に呼び出されました。私は怠け者で、適切な検査官をつかまえていなかったので、 'console.log'は私に見せなければならなかったものを私に見せていなかった。 –