我正在尝试构建一个实时Django应用程序。 由于我的托管服务的工作方式,我无法与我的Django服务器并行启动Websocket服务器。
我通过在 socket.io 的单独NodeJS网站上创建 express 服务器,并在Django服务器上拥有客户端,设法实现了用户到用户的互动连接到远程socket.io服务器。
但是,我希望让我的Django服务器直接向用户发送事件。为此,我想在Django服务器和NodeJS服务器之间建立连接。像python中的那样:
socket = io("http://socket.io.server")
socket.emit('eventForUsers')
无论如何,我有没有实现这个目标?
我发现的唯一信息似乎要求我从我的Django应用程序运行并行服务器,我不能这样做,因为我的主机不允许我运行长期流程。
答案 0 :(得分:1)
这真的取决于什么是最简单的解决方案,以及您的要求。 (如果您想要实时双向消息传递,那么我建议使用socket.io-client而不是POST
示例)
您可以(例如)使用从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,...)
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