我在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中外部访问端口。有可能吗?
答案 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)
的所有流量转发到您的应用端口$PORT
(process.env.PORT
)。
答案 2 :(得分:0)
我的解决方案是指示两个服务器监听端口80(标准做法)。 然后,将自定义标记添加到每个服务器环境,其中包含需要连接的其他远程服务器的主机名。
两台服务器都应该能够在端口80上相互联系。
在OpenShift上管理这些自定义令牌时,您可以运行rhc env help
以获得帮助。 Heroku有一个类似的机制来管理应用程序机密和密钥。