【问题标题】:Can't get socket.io and nodejs running with OpenShift无法使用 OpenShift 运行 socket.io 和 nodejs
【发布时间】:2015-07-10 03:59:29
【问题描述】:

我无法在 OpenShift 上运行 socket.io。我现在用谷歌搜索了几个小时,但没有什么真正帮助我。在本地它工作正常(当然使用不同的端口和 localhost 作为主机)。

这是我的 server.js 文件:

var port      = process.env.OPENSHIFT_NODEJS_PORT || 8080;
var ipadr = process.env.OPENSHIFT_NODEJS_IP || "127.0.0.1";
var http = require('http').createServer(function(request, response) {   
    response.writeHead(200, {"Content-Type": "text/plain"});
    response.end();
}).listen(port,ipadr);
console.log(port+":"+ipadr);

var io = require('socket.io').listen(http),
fs = require('fs'),
request = require('request'),
mysql = require('mysql'),
moment = require('moment'),
connectionsArray = [],
connection = mysql.createConnection({
host: 'xxx',
user: 'xxx',
password: 'xxx',
database: 'xxx',
port: 3306
}),
POLLING_INTERVAL = 1000,
pollingTimer;

io.on('connection', function(socket){
  console.log('a user connected');
});

var updateSockets = function(data) {
    // adding the time of the last update
    t = new Date();
    t = moment().format('H:mm:ss');
    console.log('(%s) Connections: %s', t, connectionsArray.length);
    // sending new data to all the sockets connected
    connectionsArray.forEach(function(tmpSocket) {
    tmpSocket.volatile.emit('notification', data);
    });
};
console.log('server.js executed\n');

当我在 SSH OpenShift 上运行它时,它只显示第一个 console.log 以及我的 OpenShift 端口和 ipadress 以及我的 server.js 代码的最后一行:

server.js 已执行

就是这样。因此,当我在本地测试时,我没有收到“a user connected”消息。

这就是我想在客户端 .js 文件中连接的方式:

var socket = io.connect('http://njs-uniqo.rhcloud.com:8080/');  

浏览器 (Chrome) 控制台输出:

> ?s=product&id=10:1 XMLHttpRequest cannot load http://xxx.rhcloud.com:8000/socket.io/?EIO=3&transport=polling&t=1430395459829-1.
> No 'Access-Control-Allow-Origin' header is present on the requested
> resource. Origin 'http://localhost' is therefore not allowed access.
> The response had HTTP status code 503.

如果我在客户端 .js 文件中将端口更改为 8080,我会得到 ERR_CONNECTION_TIMED_OUT

GET http://xxx.rhcloud.com:8080/socket.io/?EIO=3&transport=polling&t=1430395346761-6 net::ERR_CONNECTION_TIMED_OUT

【问题讨论】:

    标签: javascript node.js websocket socket.io openshift


    【解决方案1】:

    您需要使用端口 8000。这是 openshift 对 websocket 的强制作用。

     var socket = io.connect('http://yourapp.rhcloud.com:8000/',{'forceNew':true });
    

    8000 端口用于 http,8443 用于 https

    Source

    【讨论】:

    • 我希望你启用了 cors。如果没有,那就去做吧。- enable-cors.org/server_expressjs.html npmjs.com/package/cors
    • 是的,我启用了 cors。我尝试连接 express 模块但没有它(就像在我的代码中一样)但得到了相同的结果。
    • 嗯,cors 总是很棘手。尝试在 github 上检查/发布问题。还有一个建议是从您的 openshift 应用程序中使用套接字客户端库作为 cdn。
    • 你能更详细地解释一下你的最后一句话吗?你的意思是在html文件中使用这个<script src="https://cdn.socket.io/socket.io-1.3.5.js"></script>
    【解决方案2】:

    您必须编辑package.json。添加...

    "socket.io": "~0.9.16"
    

    ...在依赖项下。然后服务器会自动下载默认不存在的socket.io。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-10-20
      • 2017-05-07
      • 2012-06-07
      • 2016-07-13
      • 2017-05-09
      • 2020-07-24
      • 2013-12-19
      • 1970-01-01
      相关资源
      最近更新 更多