2016-03-22 22 views
2

現在、私はDjangoプロジェクトのリアルタイム通知を実装しています。DjangoとSocket.ioのリアルタイム通知

私はthis tutorialの指示に従っています。問題は、私はSocket.io 1.4.5を使用しており、チュートリアルは1.0より前のバージョン用に書かれています。だから、私は'Migrating from 0.9'のガイドラインに従ってSocket.ioサイトにいくつかのコードを適応させなければならなかった。どのような私が得たことは次のとおりです。

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']); 
    }); 
}); 

私はこのスクリプト実行しているとき:沈黙の2秒後

node notifications.js 

を私はこのエラーを取得:

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) 

誰かが何に私を指すことができます私は間違いをした?

答えて

2

私の間違いが見つかったばかりです。

クッキーにアクセスするには、socket.handshakeの代わりにsocket.requestを使用する必要があります。だから私の現在のコードは次のようになります:

+0

このサードパーティのサービスを考えましたか? – Ryan

+0

ライアン、まだ。私はwebdevには新しく、ちょうど私が見た最初の解決策に固執しました。現在のところ私のアプリはウェブサイトのみです - サードパーティのサービスを使用する際のポイントはありますか? – Greesha0

+0

それどころか、私はサードパーティのサービスを使用して、あなたのアーキテクチャの開発と保守の面倒の多くを外注していることがわかりました。例:PubNubを見てください。あなたのリアルタイムメッセージングをすべて処理する簡単なAPIがあります。正確に法案に適合しないかもしれませんが、そこには多くの人がいます。ソケットは、特にDjangoを使い始めた先進的なものです。これは、同期HTTPを中心に構築されているフレームワークです – Ryan

関連する問題