Socket.io和OpenShift上的节点

我已经读了端口8080服务器端的OpenShift监听。 我也读过,他们强制networking套接字连接到端口8000客户端。

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

我读了很多,尝试了所有的东西,而且我真的无法弄清楚这一点。

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

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

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

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

客户端:8000,服务器:8000站点不会build立(与上面相同)

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

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

仅供参考:最后一个端口组合,与简单的io();连接io(); 而在端口8080服务器端收听正在尽善尽美的工作。 在OpenShift上的websockets是否有气质?

正如martin所build议的那样:使用OpenShift的环境variableshttps://developers.openshift.com/managing-your-applications/environment-variables.html 。 您也可以通过这种方式获取端口。
但是,与命名的variablesMartin不同的是,默认情况下从“最新版本”盒式磁带获取的代码是否包含env.NODE_IP和env.NODE_PORT。 如果使用0.10节点盒式磁带,则可能会有所不同。

在与这个战斗之后,有点想过我会分享我的设置使用openshift 3,nodejs 6+,express 4和socket.io 1。

完整的信息是在下面,但只是要总结一些主要观点不同于我所看到的其他来源:

  • 服务器使用端口8080和ip 0.0.0.0
  • 无需在客户端或服务器上将传输选项设置为“websocket”
  • 不需要在客户端上指定端口
  • 对于远程客户端连接,确保不仅要调整套接字url的ws / wss,还要调整在openshift上不同的path,当你为nodejsapp创build安全路由

对于服务器代码,我正在使用以下内容。 注意一些浮动的旧文章似乎将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(); 

如果您尝试从远程客户端连接,那么您只需要提供path到您的应用程序的安全或不安全的path,并使用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');