Доступ к серверу socket.io через обслуживаемые страницы Apache - PullRequest
10 голосов
/ 12 сентября 2011

Я надеюсь, что это не выглядит как ужасно глупый вопрос, но я учусь, как реализовать сервер socket.io для моего сайта для создания приложений реального времени, но моя проблема в том, что я не могу понять, узнать, как реализовать указанные приложения в среде Apache. В настоящее время, когда я запускаю node server.js, чтобы запустить свой сервер socket.io, я должен получить к нему доступ, посетив http://localhost:XXXX, где XXXX - это тот порт, к которому я подключаю его, естественно. Я не хочу, чтобы мой веб-сайт принудительно просматривался на другом порту, как этот, но я, очевидно, не могу подключить сервер к порту 80, так как Apache прослушивает это.

Очевидно, что естественным решением было бы остановить службу Apache, а затем разместить сервер на порту 80 таким образом, чтобы избежать коллизии, но я не хочу жертвовать всеми функциями, которые предлагает Apache. По сути, я хочу продолжать обслуживать свой веб-сайт через Apache через порт 80 и интегрировать некоторые аспекты приложений реального времени через socket.io через порт 3000, скажем.

Есть ли способ сделать это, чтобы избежать вещей, которые я не хочу? Это 1) доступ пользователей к моему сайту с :3000 в URL, 2) отключение Apache, 3) использование iframes.

Заранее спасибо.

Ответы [ 2 ]

3 голосов
/ 13 сентября 2011

Как правило, вы должны иметь возможность скрывать Node.js с помощью mod_proxy. Немного поиска оказалось так: https://github.com/sindresorhus/guides/blob/master/run-node-server-alongside-apache.md (старая ссылка умерла, это новая)

Однако Socket.io может быть немного привередливым (https://github.com/LearnBoost/socket.io/issues/25),, поэтому у вас могут быть проблемы именно с ним.

Поскольку этот билет немного стар, его стоит попробовать. Только не удивляйтесь, если у вас есть проблемы. После этого вы ставите следующую ставку: bind Node.js toport 80 и она действует в качестве обратного прокси-сервера для Apache с https://github.com/nodejitsu/node-http-proxy (все еще находящимся на стадии разработки).

Оптимальным решением было бы запустить его на своем собственном сервере, и просто, если ваш трафик сокетов, перейдите на socket.example.com или что-то в этом роде.

2 голосов
/ 17 августа 2012

Socket.io имеет несколько транспортных механизмов. Некоторые из них не работают, если вы запускаете Apache в качестве обратного прокси-сервера, но некоторые работают. Транспорты, которые не работают, - это websocket и flash, но xhr-опрос и jsonp-опрос должны работать.

Вот пример настройки опции транспорта для socket.io:

var io = require("socket.io").listen(server);
io.set("transports", ["xhr-polling", "jsonp-polling"]);

На моем Apache я использую обычные виртуальные хосты, основанные на именах, и настройку обратного прокси , и с этими транспортными средствами, похоже, работает socket.io.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...