Я пытаюсь разместить приложение nodejs в службе хостинга «dotcloud». Мой nodejs использует пакет «websocket» для обработки сообщений. т.е. npm install websocketХостинг сервера nodejs на dotcloud
Мое приложение отлично работает, когда оно работает на localhost на моем ноутбуке. Но когда я развертываю приложение в dotcloud, он работает неправильно.
Вот что происходит: Вы указываете ваш браузер URL-адрес на dotcloud: pirate-captainlonate.dotcloud.com
Затем экспресс обрабатывает запрос GET с express.get («/» .. .....) {} Экспресс обслуживает страницу .html для клиента, как и следовало ожидать. Файл .html в свою очередь пытается установить соединение с сервером. Опять же, я могу получить , чтобы это было нормально работать на моей локальной машине. Однако связь не устанавливается. В частности, dotcloud определенно служит мне .html-файлу, но файл .html не устанавливает соединение с сервером. Но connection.onerror также не называется. Это странно.
Вот код, чтобы помочь вам понять, что я делаю:
стороне клиента:
this.connection = new WebSocket('ws://pirate-captainlonate.dotcloud.com:1337');
this.connection.onerror = function (error) {
console.log("ERROR with the connection *sadface*");
};
**** Note that I note the onerror function here to show that I do indeed have it set up, but it's not being called. It would seem that no error is being thrown.
стороне сервера:
var webSocketServer = require('websocket').server; // websocket
var server = require('http').createServer();
var expr = require("express"); // load the express module
var xpress = expr(); // xpress now holds the server object
// Helps Node serve the game.html page upon a get request
xpress.configure(function() {
xpress.use(expr.static(__dirname + "/public"));
xpress.set("view options", {layout: false});
});
// All requests to root serve the game.html page
xpress.get('/', function(req, res) {
res.sendfile(__dirname + '/public/game.html');
});
// What ports to listen on
var webSocketsServerPort = 1337;
xpress.listen(8080);
server.listen(webSocketsServerPort, function() {
console.log((new Date()) + " Server is listening on port " + webSocketsServerPort);
});
// WebSocket Server
var wsServer = new webSocketServer({
httpServer: server
});
Это должно быть достаточно код, чтобы показать вам, как он работает. Теперь один из вас, вероятно, спросит, что такое «>> dotcloud logs»?
[www.0] ==> /var/log/supervisor/app.log <==
[www.0] Sat Feb 16 2013 02:57:59 GMT+0000 (UTC) Server is listening on port 1337
[www.0] ==> /var/log/supervisor/supervisord.log <==
[www.0] 2013-02-16 02:57:57,946 WARN Included extra file "/home/dotcloud/current/supervisord.conf" during parsing
[www.0] 2013-02-16 02:57:58,033 INFO RPC interface 'supervisor' initialized
[www.0] 2013-02-16 02:57:58,033 WARN cElementTree not installed, using slower XML parser for XML-RPC
[www.0] 2013-02-16 02:57:58,033 CRIT Server 'unix_http_server' running without any HTTP authentication checking
[www.0] 2013-02-16 02:57:58,038 INFO daemonizing the supervisord process
[www.0] 2013-02-16 02:57:58,039 INFO supervisord started with pid 140
[www.0] 2013-02-16 02:57:59,048 INFO spawned: 'app' with pid 154
[www.0] 2013-02-16 02:58:00,290 INFO success: app entered RUNNING state, process has stayed up for > than 1 seconds (startsecs)
[db.0] ==> /var/log/mongodb/mongodb.log <==
[db.0] Sat Feb 16 01:45:02 [conn4] end connection 127.0.0.1:51326 (0 connections now open)
Хорошо, хорошо, мне бы очень хотелось, чтобы эта работа работала. Я был на этом вечно. Дайте мне знать, если что-то еще вам нужно, чтобы помочь мне ответить на мой вопрос.
Спасибо,
--Nathan
Добавление: Это как сервер отправляет файл HTML.
xpress.get('/', function(req, res) {
res.sendfile(__dirname + '/public/game.html');
});
Отличный вопрос, много информации, что позволило легко найти вашу проблему. В основном вам нужен второй порт http. Я объясню, как это сделать в моем ответе ниже. –