私は少しの助けが必要です。nodejsをサーバとして使用してPythonでsocket.ioメッセージを送信
私はリアルタイムWebを構築する方法を学ぶためのテストをしているので、socket.ioでnode.jsを使用します。すべてが楽しいですが、ノードまたはJavaScriptではない別のソースでリッスンしているチャンネルにメッセージを公開しようとするとクラッシュします。
サーバー側:(外部に公開するときに失敗したノードsendedではれる)
var app = require('express')();
var http = require('http').Server(app);
var pub = require('redis').createClient(6379, 'localhost', {detect_buffers: true, return_buffers: false});
var sub = require('redis').createClient(6379, 'localhost', {return_buffers: true});
var io = require('socket.io')(http);
var redis = require('socket.io-redis');
io.adapter(redis({pubClient: pub, subClient: sub, host: '127.0.0.1', port: 6379}));
io.on('connection', function(socket){
socket.on('chat message', function(msg){
io.emit('chat message', msg);
console.log("something happens: " + msg);
});
});
http.listen(3000, function(){
console.log('listening on *:3000');
});
あなたはこのコードを入れて、ノードとそれを実行し、それを試しため、クライアント側のコードは必要ありません。実行中の場合は、Redisのチャンネルに直接公開し、何が起こっているかを確認してください。
Error: 5 trailing bytes
at Object.decode (.../node/node_modules/msgpack-js-v5/msgpack.js:266:47)
at Redis.onmessage (.../node/node_modules/socket.io-redis/index.js:93:24)
at emitTwo (events.js:87:13)
at RedisClient.emit (events.js:172:7)
at RedisClient.return_reply (.../node/node_modules/redis/index.js:654:22)
at .../node/node_modules/redis/index.js:307:18
at nextTickCallbackWith0Args (node.js:419:9)
at process._tickCallback (node.js:348:13)
enter code here
これはどうして起こるのですか?どうすれば修正できますか?
ありがとうございました!
NEW COMMENT: robertklepのおかげで、同じプロトコルを使用する必要があることがわかりました。そのため、単純なPythonスクリプトを使って書きましたが、同じエラーで失敗します。
import redis
import msgpack
text_packed = msgpack.packb('refresh', use_bin_type=True)
r = redis.StrictRedis(host='localhost', port=6379, db=0)
r.publish('socket.io#/#', text_packed)
私もこのアプローチを試みたが、私はImは、いくつかのparam間違って渡し思う:この場合
from emitter import Emitter
io = Emitter(dict(host='localhost', port=6379))
io.Emit('chat message', "message from python!")
# or specificating the room
io.To("socket.io#/#").Emit('chat message', "message from python!")
を、何もRedisのために到着していません。
その情報をありがとうRobertklep。私は、redisを通してmsgpackを使用してPythonで新しいスクリプトを作成しますが、問題は解決しません。 私は同じエラーがあります: "エラー:後続バイト23"。 – user2742735