Derzeit implementiere ich Echtzeit-Benachrichtigungen für mein Django-Projekt.Echtzeit-Benachrichtigungen mit Django und Socket.io
Ich befolge die Anweisungen von this tutorial. Problem ist, ich benutze Socket.io 1.4.5 und Tutorial ist für Pre-1.0-Versionen geschrieben. Also musste ich einige Code nach 'Migrating from 0.9' Richtlinie auf Socket.io Website anpassen. Was ich habe ist:
var http = require('http');
var server = http.createServer().listen(8002);
var io = require('socket.io')(server);
var cookie_reader = require('cookie');
var querystring = require('querystring');
var redis = require('redis');
// Supposedly this should store cookie set by Django
io.use(function(socket,accept){
var data = socket.request;
if(data.headers.cookie){
data.cookie = cookie_reader.parse(data.headers.cookie);
return accept(null, true);
}
return accept('error', false);
});
io.sockets.on('connection', function (socket) {
// Redis client
client = redis.createClient();
// Subscribe to notification channel
client.subscribe('notifications.' + socket.handshake.cookie['sessionid']);
console.log('subscribed');
//Grab message from Redis and send to client
client.on('message', function(channel, message){
console.log('on message', message);
socket.send(message);
});
// Unsubscribe
socket.on('disconnect', function() {
client.unsubscribe('notifications.' + socket.handshake.cookie['sessionid']);
});
});
Wenn ich renne dieses Skript:
node notifications.js
Nach 2 Sekunden Stille ich diese Fehlermeldung erhalten:
client.subscribe('notifications.' + socket.handshake.cookie['sessionid']);
^
TypeError: Cannot read property 'sessionid' of undefined
at Namespace.<anonymous> (path/to/notifications.js)
at Namespace.emit (events.js:107:17)
at Namespace.emit (/path/to/node_modules/socket.io/lib/namespace.js:206:10)
at /path/to/node_modules/socket.io/lib/namespace.js:174:14
at process._tickCallback (node.js:355:11)
Kann jemand mir zeigen, was ich habe falsch gemacht?
Haben Sie einen Drittanbieter-Dienst in Betracht gezogen? – Ryan
Ryan, noch nicht. Ich bin neu bei Webdev und habe mich einfach an die erste Lösung gehalten, die ich gesehen habe. Derzeit ist meine App nur auf der Website verfügbar. Gibt es einen Punkt bei der Nutzung von Drittanbieterdiensten? – Greesha0
Im Gegenteil, ich finde, dass die Verwendung eines Drittanbieter-Dienstes einen Großteil des Aufwands für die Entwicklung und Wartung Ihrer Architektur auslagert. Zum Beispiel: Werfen Sie einen Blick auf PubNub, es gibt eine einfache API, um alle Ihre Echtzeit-Messaging zu behandeln. Könnte die Rechnung nicht genau passen, aber es gibt viele da draußen. Sockets sind definitely erweiterte Sachen, mit denen zu arbeiten, vor allem mit Django beginnen - ein Framework, das sehr um synchrone http gebaut ist – Ryan