2017-08-27 184 views
0

我想构建一个实时Django应用程序。 由于我的托管服务工作的方式,我无法启动与我的Django服务器并行的Websocket服务器。从Django服务器连接到远程socket.io服务器

我设法把用户到用户交互由Django的服务器上创建一个表达在一个单独的网站的NodeJS与socket.io服务器,且用户还连接到远程服务器socket.io。

但是,我想让我的Django服务器直接发送事件给用户。为此,我想在Django服务器和NodeJS服务器之间建立连接。类似python的东西:

socket = io("http://socket.io.server") 
socket.emit('eventForUsers') 

有没有办法让我达到这个目的?

我发现的唯一信息似乎需要我从我的Django应用程序运行并行服务器,但我无法执行此操作,因为我的主机不允许我运行长期过程。

回答

1

这真的取决于什么是最简单的解决方案,以及您的要求是什么。 (如果您想进行实时双向通讯那么我建议使用,而不是POST例如socket.io客户端)


POST(GET,PUT,...)

您可以(例如)使用POST请求从你的Django到节点

Django的:python例子(还有其他的方式来执行POST从Django中到节点)

reqParams = {"action":"doThis","data":"put the pizza in the oven"}  
import requests 
requests.post('http://ip:port/route', params = reqParams) 

节点例如:侦听后在/route(快递),并打印Django的请求

var express = require('express'); 
var app = express(); 

app.post('/route', function (req, res) { 
    console.log(req.query); res.end(); 
}); 

app.listen(3000, function() { 
    console.log('Example app listening on port 3000!'); 
}); 

然后你可以使用该资料req.params像广播东西到socket.io客户执行操作的PARAMS (或特定的客户端)

这也可以做周围的其他方式,执行请求从节点发送数据使用到的Django POST (GET,...)


Socket.io-client在Django

另一个(容易)解决方案是包括socket.io-client在你的Django Web应用程序,所以当web应用程序是通过浏览器打开它连接到您的节点socket.io服务器作为客户端。

(在Django使用javascript)

<script src="/socket.io/socket.io.js"></script> 
<script> 
    var socket = io('http://ip:port'); 
    socket.on('connect', function(){alert("Hello World!");}); 
    socket.on('event', function(data){}); 
    socket.on('disconnect', function(){}); 
</script> 

更多资源: 1. JavaScript (Django Docs) 2。Including the static files in your template

+0

不错,第一个解决方案看起来很聪明我会试试看,并让你知道。关于第二种解决方案:除非我错过了一些东西,这只会将用户连接到socket.io,而不是django服务器本身?我不明白我如何使用这种方法来进行通信Django - > client –

+0

@RyanPergent我不知道你的确切场景,这就是为什么我建议这两个,所以你可以认为哪种解决方案最适合你(如果你想要webapp用户像客户端连接** socket.io **/else如果你想把webapp本身作为一个'客户端'然后使用** request **)。 – EMX

+1

第一种方法工作得很好,唯一的就是'req.query'而不是'req.params' :)。谢谢! –