Независимо от того, быстро ли Apache становится узким местом или нет, зависит от того, как вы его используете. Это очень зрелый веб-сервер, и он прекрасно организовал массовые веб-сайты по всему миру. Независимо от того, ваше приложение socket.io не обязательно должно использовать тот же порт, что и ваше веб-приложение. Вы могли бы подключить socket.io к порту 8081 и иметь свои обычные HTTP-запросы на порту 8080. Тогда вы должны настроить свой прокси-сервер на 8080, как сейчас, и просто подключите соединение socket.io к 8081.
Порт в этом случае не должен быть проблемой, поскольку это не то, что пользователь увидит в своем URL-адресе, а связь socket.io не должна проходить через прокси-сервер. Если вы подаете достаточное количество запросов на Apache, чтобы быть законным образом узким местом, вы все равно сможете весить для лучшей среды хостинга!
Пример
Сервер
var app = require('http').createServer(handler)
, io = require('socket.io').listen(8081)
, fs = require('fs')
app.listen(8080);
function handler (req, res) {
fs.readFile(__dirname + '/index.html',
function (err, data) {
if (err) {
res.writeHead(500);
return res.end('Error loading index.html');
}
res.writeHead(200);
res.end(data);
});
}
io.sockets.on('connection', function (socket) {
socket.emit('news', { hello: 'world' });
socket.on('my other event', function (data) {
console.log(data);
});
});
Обратите внимание, что веб-сервер прослушивает на отдельном порту, чем соединение Socket.io. Это означает, что вы можете безопасно проксировать обычные HTTP-запросы от 80 до 8080 с помощью mod_proxy, а socket.io может довольно хорошо общаться с портом 8081, минуя прокси. Вашим пользователям не нужно будет вводить порт, чтобы попасть на сайт.
Client
<script src="http://domain.com:8081/socket.io/socket.io.js"></script>
<script>
var socket = io.connect('http://domain.com:8081');
socket.on('news', function (data) {
console.log(data);
socket.emit('my other event', { my: 'data' });
});
</script>
Извините, что я очень новичок в работе на стороне сервера и node.js/socket.io, все еще изучая канаты, изучая примеры/демонстрации. Сейчас я могу получить доступ к чату, перейдя на example.com : 8080 в моем браузере. Как мне сделать это, чтобы я мог просто перейти на example.com/chat, чтобы попасть в чат? Без необходимости связывать порт 80 (потому что Dreamhost не разрешает его). Я пробовал использовать mod_proxy (при условии от Dreamhost), но это не работает. Есть ли другой прокси-сервер, который работает с websockets, которые я могу использовать? Бесконечно благодарен. – Legendre
Как настроен ваш сервер? Как вы обслуживаете веб-файлы? Я предлагаю, чтобы ваше приложение-узел создало HTTP-сервер, прослушивающий порт 8080, и вы сопоставляете его с 80, используя mod_proxy. Затем у вас есть приложение socket.io на 8081, и вы просто укажете свой javascript на эту услугу. Я обновил свой ответ, чтобы включить пример того, что я имею в виду. –
Я думаю, что я еще слишком неопытен, чтобы адекватно ответить на ваши вопросы. (возможно, не знаю, о чем я говорю) Однако я прочитал ваше предложение, пример кода и объяснения, и я думаю, что понимаю общее решение. Я собираюсь изучить еще несколько учебников, а затем ваш пример. Спасибо, что указали мне в правильном направлении! :) – Legendre