OpenShift上的Socket.io和节点

时间:2015-07-19 11:37:10

标签: node.js express socket.io openshift

我已经读过OpenShift在端口8080服务器端监听。我还读到他们强制Web套接字连接到端口8000客户端。

我没有看到我需要提到端口8000服务器端,因为显然OpenShifts apache reverseProxy应该路由8000到8080(由应用程序决定它是什么类型的连接?)

我已经阅读了很多内容,尝试了所有内容,而且我真的无法理解这一点。

在收听8080并与var socket = io();客户端连接时,网站在本地主机上运行良好。

在OpenShift上,请参阅以下内容:

客户端:8000,服务器:8080 运行并建立WS连接,但没有来自服务器的响应。没有.on('connection', ... )。有道理,而不是听8000。

客户端:8000,服务器:8080,Server2:8000 试图拥有2个独立的服务器并且该站点不会构建(等待端口8080可用时超时)

客户端:8000,服务器:8000 网站不会构建(与上面相同)

客户端:只需使用io()服务器连接:8080 网站按预期运行,但回落到xhr长轮询

是否有人知道使用最新Socket.io,OpenShift和Express 4的直接教程或示例?最糟糕的是,你看到的每个例子都是以不同的方式启动服务器(不赞成,比我知道的更新?)的方式。它似乎很简单(甚至是广告)的疯狂。

仅供参考:最后一个端口组合,简单地与io();连接,并在端口8080服务器端上进行监听,并且在早期工作正常。在OpenShift上,websockets是否会变得不稳定?

2 个答案:

答案 0 :(得分:0)

正如马丁建议的那样:使用在https://developers.openshift.com/managing-your-applications/environment-variables.html找到的OpenShift的环境变量。您也可以通过这种方式获得端口。
但是,与变量Martin命名的不同,我默认从“最新版本”盒中获得的代码是否包含env.NODE_IP和env.NODE_PORT。如果您使用的是0.10节点盒式磁带,则可能会有所不同。

答案 1 :(得分:0)

在与此争吵之后我会用openshift 3,nodejs 6 +,express 4和socket.io 1分享我的设置。

完整信息如下,但只是总结一些与我看到的其他来源建议不同的主要观点:

  • 服务器使用端口8080和ip为0.0.0.0
  • 没有必要将transports选项设置为" websocket"在客户端或服务器上
  • 不需要在客户端
  • 上指定端口号码
  • 对于远程客户端连接,确保不仅调整socket / url的ws / wss,还要调整在为nodejsapp创建安全路由时openshift上的路径不同

对于服务器代码,我正在使用以下内容。请注意一些旧文章浮动似乎表明127.0.0.1为端口,但实际上在openshift 3上似乎是0.0.0.0

var express = require('express');
var app = express();

var http = require('http').Server(app);
var io = require('socket.io').listen(http);

var port = process.env.PORT || process.env.OPENSHIFT_NODEJS_PORT || 8080;
var ip_address = process.env.IP   || process.env.OPENSHIFT_NODEJS_IP || '0.0.0.0';

http.listen(port, ip_address, function(){
  console.log( "Listening on " + ip_address + ", port " + port );
});

对于客户端代码,如果您尝试连接的页面是通过openshift节点应用程序提供的,那么连接非常简单..

// works for http or https
var socket = io.connect();

如果您尝试从远程客户端进行连接,则只需提供到应用程序的安全或不安全路径的路径,并使用ws / wss。无需指定8000或8443的端口!

// http
var socket = io.connect('ws://ROUTENAME-APPNAME.regionandstuff.openshiftapps.com');

// https
var socket = io.connect('wss://SECUREROUTENAME-APPNAME.regionandstuff.openshiftapps.com');