2014-03-27 18 views
3

我本地编写了一个使用socket.io和express模块​​的nodeJS应用程序。 我想使用openshift进行托管。 因此,我将主.js更改为server.js,它似乎是openshift文件的索引等效项,并将服务器端口设置更改为:OpenShift NodeJS部署:socket.io index.html端口分配等

var server = require('http')。createServer(app)。监听(process.env.OPENSHIFT_NODEJS_PORT || 3000);

如某些帖子所示。 但是之后git的承诺,我仍然得到:

远程:信息:socket.io开始 远程:警告:错误提出:错误:听EACCES 远程:DEBUG:计划节点server.js代码为0 退出远程: 远程:DEBUG:使用'node server.js'开始子进程

和网站无法正常工作。

由于应用程序正在服刑的HTML文件中,有两个地方,那里的港口被提及,其坐在那的index.html供应:

头:

<script src='//localhost:3000/socket.io/socket.io.js'></script> 

和JavaScript的HTML文件内:

var socket = io.connect('//localhost:'+process.env.OPENSHIFT_NODEJS_PORT || 3000); 

// INTIAL VARS和从服务器 socket.on( 'clientConfig',onClientConfig)多列表;

所有文件和模块看似上传,但EACCES错误依然存在。

我感觉可能是到localhost:3000的标头链接可能是跳过点,但我不确定。任何人有任何想法,问题是什么? 另外,在socket.io模块文件夹中没有:socket.io/socket.io.js文件,我发现它很混乱。

回答

5

您的WebSocket的服务器端需要监听你的openshift IP地址端口8080,客户端需要连接到您的WS://app-domain.rhcloud.com:8000

+1

因此,在server.js中,它需要是8080,而在html中,所有的socket都是ws://app-domain.rhcloud.com:8000,是的? –

+0

正确。您也可以使用wss://app-domain.rhcloud.com:8443来使用ssl – 2014-03-27 18:40:28

+0

好吧,我将server.js更改为: –

2

我有一个https://www.openshift.com/blogs/10-reasons-openshift-is-the-best-place-to-host-your-nodejs-app#websockets

你不需要任何额外的服务器端更改after adapting your code to take advantage of environment variables (when available)

OpenShift的路由层暴露在几个外部访问的端口应用程序:80,443,8000,8443对此处使用WebSockets几个注意事项。

端口8000和8443都能够处理websocket连接升级。我们希望很快能够通过端口80和443添加对WebSocket连接的支持。

+0

好吧,这让我很困惑,我仍然试图对第一个答案进行测试。 –

+0

如果你看上面,我没有在服务器端使用特定的IP来启动服务器。那是问题吗? –

+0

是的。此外,“process.env”仅适用于您的服务器端代码。如果你想从客户端JavaScript访问这些信息,你需要建立另一种引用它的方式。 –

8

我最近开发了一个使用socket.io的聊天客户端应用程序,并且还有webrtc。通过对代码进行以下更改,我能够在openshift上部署应用程序。

客户端

保持包括像这样

<script src="/socket.io/socket.io.js"></script>

以相对的方式脚本标记虽然宣布io.connection,更改IP部分在此应用程序指向服务器格式。

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

8000是http和8443是用于HTTPS

服务器端

的IO和服务器都应该相同的端口和顺序收听其中的语句运行也应该给予重视。

第1步:使用应用程序声明http服务器。 (应用程序是从快车获得)

var express = require('express');var app = express();) var server = require('http').Server(app);

步骤2:

申报IO从socket.io和与服务器对象相结合。 var io = require('socket.io').listen(server);

第3步:

现在,让服务器监听openshift端口和IP。

server.listen(process.env.OPENSHIFT_NODEJS_PORT, process.env.OPENSHIFT_NODEJS_IP);

请特别注意你写的语句的顺序,这是导致问题的顺序。

+0

这正是我的问题。我花了5个多小时的时间试图找出我做错了什么,读了大量的文章,这些文章都是以类似的方向导致的,但没有像你那样清楚地说出来。我没有意识到服务器实际上并没有听,因为我相信socket.io已经在做这个了! – Andrew