아파치가 곧 병목 현상이되는지 아닌지는 정확히 어떻게 사용하고 있는지에 달려 있습니다. 그것은 매우 성숙한 웹 서버로 세계 전역의 방대한 웹 사이트를 잘 호스팅하고 있습니다. 그럼에도 불구하고 socket.io 응용 프로그램이 웹 응용 프로그램과 동일한 포트를 공유 할 필요는 없습니다. socket.io를 포트 8081에서 청취하고 포트 8080에서 일반적인 http 요청을 할 수 있습니다. 그러면 지금 가지고있는대로 프록시가 8080을 가리 키도록 설정하고 socket.io 연결을 8081로 이동하십시오.
이 경우 포트는 사용자가 URL에서 볼 수있는 것이 아니며 socket.io 통신은 프록시를 거칠 필요가 없으므로 문제가되지 않아야합니다. 아파치가 합법적으로 병목 현상을 일으키기에 충분한 요청을하는 경우, 더 나은 호스팅 환경을 원할하게 될 것입니다!
예
서버 웹 서버가 socket.io 연결보다 별도의 포트에서 수신 대기
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);
});
});
알 수 있습니다. 즉, mod_proxy를 사용하여 80에서 8080 사이의 일반 HTTP 요청을 안전하게 프록시 할 수 있으며 socket.io는 프록시를 거치지 않고 포트 8081에서 직접 매우 행복하게 통신 할 수 있습니다. 사용자는 사이트에 접속하기 위해 포트를 입력 할 필요가 없습니다.
클라이언트
<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 in my browser. chat/chat에 접속하려면 어떻게해야합니까? (Dreamhost가 허용하지 않기 때문에) 포트 80을 바인드하지 않아도됩니다. 제공된 mod_proxy를 사용했습니다. Dreamhost)하지만 작동하지 않는 다른 프록시가 작동합니까 내가 사용할 수있는 웹 소켓이 있습니까? 대단히 감사합니다. – Legendre
서버는 어떻게 설정합니까? 어떻게 웹 파일을 제공하고 있습니까? 내가 말하고 싶은 것은 노드 애플리케이션이 포트 8080에서 수신하는 http 서버를 생성하고 mod_proxy를 사용하여 80에 매핑하는 것입니다. 그런 다음 socket.io 응용 프로그램을 8081에서 수신 대기하게되면 자바 스크립트를 해당 서비스로 지정합니다. 내 대답을 업데이트하여 내 뜻을 예로 들어 설명했습니다. –
나는 아직도 너의 질문에 적절히 대답하기에는 너무 경험이 없다고 생각한다. (아마도 내가 무슨 말을하는지 모른다) 그러나, 나는 당신의 제안, 예제 코드와 설명을 읽었고 나는 일반적인 해결책을 이해한다고 생각한다. 나는 더 많은 튜토리얼을 공부하고, 당신의 예를 공부할 것이다. 나를 올바른 방향으로 향하게 해주셔서 감사합니다! :) – Legendre