我已经读过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是否会变得不稳定?
答案 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分享我的设置。
完整信息如下,但只是总结一些与我看到的其他来源建议不同的主要观点:
对于服务器代码,我正在使用以下内容。请注意一些旧文章浮动似乎表明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');