2015-01-13 58 views
2

我有節點服務器:django的經由節點服務器保存消息數據庫和socket.io

var http = require('http'); 
var server = http.createServer().listen(4000); 
var io = require('socket.io').listen(server); 
var cookie_reader = require('cookie'); 
var querystring = require('querystring'); 

var redis = require('redis'); 
var sub = redis.createClient(); 

//Subscribe to the Redis chat channel 
sub.subscribe('chat'); 

//Configure socket.io to store cookie set by Django 
io.use(function(){ 
    io.set('authorization', function(data, accept){ 
     if(data.headers.cookie){ 
      data.cookie = cookie_reader.parse(data.headers.cookie); 
      return accept(null, true); 
     } 
     return accept('error', false); 
    }); 
    io.set('log level', 1); 
}); 

io.sockets.on('connection', function (socket) { 

//Grab message from Redis and send to client 
sub.on('message', function(channel, message){ 
    socket.send(message); 
}); 

//Client is sending message through socket.io 
socket.on('send_message', function (message) { 
    values = querystring.stringify({ 
     comment: message, 
     sessionid: socket.handshake.cookie['sessionid'], 
    }); 

    var options = { 
     host: 'localhost', 
     port: 8000, 
     path: '/node_api', 
     method: 'POST', 
     headers: { 
      'Content-Type': 'application/x-www-form-urlencoded', 
      'Content-Length': values.length 
     } 
    }; 

    //Send message to Django server 
    var req = http.request(options, function(res){ 
     res.setEncoding('utf8'); 

     //Print out error message 
     res.on('data', function(message){ 
      if(message != 'Everything worked :)'){ 
       console.log('Message: ' + message); 
      } 
     }); 
    }); 

    req.write(values); 
    req.end(); 
}); 

});

當我發送消息時,它不會在數據庫中保存..

這裏是我的Django的看法:

@csrf_exempt 
def node_api(request): 
    print "inside node" 
    try: 
     print "inside try" 
     session = Session.objects.get(session_key=request.POST.get("sessionid")) 
     print "first" 
     user_id = session.get_decode().get("_auth_user_id") 
     print user_id 
     user = User.objects.get(id=user_id) 

     Comments.objects.create(user=user, text=request.POST.get("comment")) 
     r = redis.StrictRedis(host="localhost", port=6379, db=0) 
     r.publish("chat", user.username + ": " + request.POST.get("comment")) 

     return HttpResponse("Everything worked :") 
    except Exception, e: 

     return HttpResponseServerError(str(e)) 

哪些錯誤在這裏?

任何人都可以引導我正確的方向嗎? 當我去「/ node_api /」 URL,它說會話匹配查詢不列入存在..

我的顯示信息視圖:

@login_required 
def home(request): 
    print "entered" 
    comments = Comments.objects.select_related().all()[0:100] 
    return render(request, "index.html", locals()) 

當我提交了不保存郵件數據庫既不顯示。 ..

Thanx提前??

回答

1

如果你使用python,那你爲什麼不嘗試python的實時方式。

用django嘗試龍捲風。它支持socket.io ..

你可以用python編碼沒有困難。 這並不意味着JavaScript不好,但嘗試在python中做,並看看龍捲風,redis,django。你會找到你的解決方案。

相關問題