繁体   English   中英

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

[英]Connect to a remote socket.io server from Django server

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

我通过使用socket.io在单独的NodeJS网站上创建了一个快速服务器,并使Django服务器上的客户端也连接到远程socket.io服务器,从而实现了用户之间的交互。

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

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

反正我有实现这一目标的方法吗?

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

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


开机自检(GET,PUT,...)

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

Django: python示例(还有其他方法可以从Django执行POST到Node)

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 POST (GET,...)


Django中的Socket.io-client

另一个(简便)的解决方案是将socket.io-client包含在Django Web应用程序中,以便在浏览器打开Web应用程序时将其作为客户端连接到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. 在模板中包含静态文件

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM