从Django服务器连接到远程socket.io服务器

时间:2017-08-27 23:26:20

标签: javascript node.js django express socket.io

我正在尝试构建一个实时Django应用程序。 由于我的托管服务的工作方式,我无法与我的Django服务器并行启动Websocket服务器。

我通过在 socket.io 的单独NodeJS网站上创建 express 服务器,并在Django服务器上拥有客户端,设法实现了用户到用户的互动连接到远程socket.io服务器。

但是,我希望让我的Django服务器直接向用户发送事件。为此,我想在Django服务器和NodeJS服务器之间建立连接。像python中的那样:

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

无论如何,我有没有实现这个目标?

我发现的唯一信息似乎要求我从我的Django应用程序运行并行服务器,我不能这样做,因为我的主机不允许我运行长期流程。

1 个答案:

答案 0 :(得分:1)

这真的取决于什么是最简单的解决方案,以及您的要求。 (如果您想要实时双向消息传递,那么我建议使用socket.io-client而不是POST示例)

POST(GET,PUT,...)

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

Django: python示例(还有其他方法可以从Django对节点执行POST)

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客户端(或特定客户端)广播内容

这也可以通过相反的方式完成,使用POST (GET,...)

执行从Node向Django发送数据的请求 Django中的

Socket.io-client

另一个(更简单的)解决方案是在您的Django webapp中包含socket.io-client,以便在浏览器打开webapp时将其作为客户端连接到您的Node 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