如何在两个不同的主机中有两个服务器(django和node.js)并相互通信?

时间:2013-12-28 05:44:07

标签: node.js heroku openshift

我在openshift上有一个django应用程序,因为this而无法添加node.js盒式磁带,然后我决定在另一个主机中创建另一个应用程序,如heroku。我想在客户端的html中编写这个(在django openshift应用程序中):

.....
<script src="{% static 'social/js/socket.io.js' %}"></script>
<script>
    var socket = io.connect('mynodejs.herokuapp.com', {port: 4000});
</script>

并在服务器端执行此操作(在heroku应用程序中):

var http = require('http');
var server = http.createServer().listen(4000);

我的意思是我想在openshift(django)中连接两个应用程序,在heroku中连接一个(用于node.js服务器)。 但这并不适用于node.js服务器(heroku),而且端口(4000)并没有真正收听请求。 我搜索此问题并在SO中找到this helpful链接。现在我知道process.env.PORT每次node.js运行脚本时都会动态更改。但我无法通过网址访问该网址。我的意思是如果process.env.PORT等于9048,那么我无法访问:

mynodejs.herokuapp.com:9048

如何在heroku中外部访问端口。有可能吗?

3 个答案:

答案 0 :(得分:0)

我曾经用Rails和Node.js创建服务器。我使用Redis作为会话存储和两个服务器之间的共享会话(对Ruby和Node.js稍微调整会话存储gem /模块)。

此外,为了在不同的服务器上调用方法,我还使用了Redis的pub / sub功能。例如,如果要从Django调用Node.js方法,首先在Node.js中订阅Redis通道,然后将消息发布到Django中的同一通道(您也可以在消息中发送方法参数)。当Node.js收到消息时,您定义的方法将立即执行。

答案 1 :(得分:0)

您始终在端口80上与Heroku应用程序连接.PORT变量仅在Heroku内部。它会将来自mynodejs.herokuapp.com(:80)的所有流量转发到您的应用端口$PORTprocess.env.PORT)。

答案 2 :(得分:0)

我的解决方案是指示两个服务器监听端口80(标准做法)。 然后,将自定义标记添加到每个服务器环境,其中包含需要连接的其他远程服务器的主机名。

两台服务器都应该能够在端口80上相互联系。

在OpenShift上管理这些自定义令牌时,您可以运行rhc env help以获得帮助。 Heroku有一个类似的机制来管理应用程序机密和密钥。