Ich brauche ein bisschen Hilfe.Emit socket.io Nachricht mit Python mit Nodejs als Server
Ich mache Tests, um zu lernen, wie man ein Echtzeit-Web erstellt, also verwende ich node.js mit socket.io. Alles funktioniert lustig, aber wenn ich versuche, eine Nachricht in dem Kanal zu veröffentlichen, der Knoten mit einer anderen Quelle hostet, die kein Knoten oder Javascript ist, stürzt es ab.
Server-Seite: (Knoten, schlägt fehl, wenn eine externe veröffentlichen sended ist)
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');
});
Sie brauchen nicht den clientseitigen Code für versuchen, nur diesen Code setzen und es mit Knoten ausgeführt werden. Wenn es läuft, versuche, auf dem Kanal mit Redis direkt zu veröffentlichen und zu sehen, was passiert.
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
Jemand versteht, warum dies geschieht? Wie kann ich es reparieren?
Vielen Dank!
NEUER KOMMENTAR: Dank robertklep weiß ich, dass es das gleiche Protokoll verwenden muss, also schrieb ich ein einfaches Python-Skript, das es verwendet, aber es schlägt mit demselben Fehler fehl.
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)
ich auch diesen Ansatz versucht, ich denke Im etwas param falsch vorbei:
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!")
In diesem Fall nichts zu Redis kommt.
Vielen Dank für diese Information Robertklep. Ich erstelle ein neues Skript mit Python mit msgpack über Redis, aber es behebt das Problem nicht. Ich habe den gleichen Fehler: "Fehler: 23 nachlaufende Bytes". – user2742735