2016-01-28 58 views
3

我跟隨此tutorial使用Django和Socket.io(節點js)構建實時應用程序。我正在建造一個流浪箱,並在我的主文件中配置了流浪機。現在,由於教程是一箇舊的帖子,我得到了很多錯誤。然而,在修復了一些廢棄的代碼後,這就是它的樣子。實現Django和socket.io一起工作

chat.js:

var server = require('http').createServer().listen(4000); 
var io = require('socket.io').listen(server, { 
    'authorization': function(data, accept) { 
     if (data.headers.cookie) { 
      data.cookie = cookie_reader.parse(data.headers.cookie); 
      return accept(null, true); 
     } 
     return accept('error', false); 
    } 
}); 
var cookie_reader = require('cookie'); 
var querystring = require('querystring'); 
var redis = require('redis'); 
var sub = redis.createClient(); 
sub.subscribe('chat'); 

io.on('connection', function (socket) { 
    sub.on('message', function(channel, message){ 
     socket.send(message); 
    }); 
    socket.on('send_message', function (message) { 
     values = querystring.stringify({ 
      comment: message, 
      sessionid: socket.handshake.cookie['sessionid'], 
     }); 

     var options = { 
      host: 'localhost', 
      port: 80, 
      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.get(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(); 
    }); 
}); 

的index.html:

<head> 
    <script src="//ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js" type="text/javascript"></script> 
    <script src="{% static "js/socket.io.js" %}"></script> 
    <script> 
     $(document).ready(function() { 
      var socket = io('http://localhost:4000'); 
      socket.on('connect', function() { 
       console.log("connect"); 
      }); 
      ... 
      ... 
      ... 
    </script> 

但現在當我加載頁面我堅持這個錯誤

GET http://localhost:4000/socket.io/?EIO=3&transport=polling&t=LA7JSiV網:: ERR_CONNECTION_REFUSED

當我的index.html改變這種

var socket = io('http://localhost:4000'); 

這個

var socket = io(); 

我得到這個錯誤

GET http://vagrant-box.com/socket.io/?EIO=3&transport=polling&t=LA7NH61 404(未找到)

我究竟做錯了什麼?請幫我解決這個問題。您的幫助將非常感謝。謝謝。

+0

我想解決完全相同的問題。你是否從django應用程序提供index.html? –

+0

@JesusGomez是的。我從'home(requrest)'方法中'core'應用程序的視圖返回'index.html'。儘管它在'project-name.view'裏面並不重要。 – Aamu

+0

你有沒有什麼運氣實現這個?能夠看到socket.io 1.0+的完整解決方案真是太棒了 –

回答

0

首先注意到你不能從django提供socket.io js,socket.io必須爲它自己的js文件提供服務,因爲它有一些聰明的魔力來確定它必須發送的文件。

變化

<script src="{% static "js/socket.io.js" %}"></script>

<script type="text/javascript" src="http://localhost:4000/socket.io/socket.io.js"></script>

(你將不得不改變對生產這些URL)

之後,你必須讓socket.io知道確切架構,主機和端口連接到node.js服務器,否則您會得到一個404套接字將tr y連接到您的django服務器正在監聽的端口。

var socket = io('http://localhost:4000'); 
相關問題