Estoy buscando una forma de integrar Node.js + Socket.io + Apache de la siguiente manera: Quiero que apache continúe publicando archivos HTML/JS. Quiero Node.js a la escucha de conexión en el puerto 8080. Algo como esto:Node.js + Socket.io + Apache
var util = require("util"),
app = require('http').createServer(handler),
io = require('/socket.io').listen(app),
fs = require('fs'),
os = require('os'),
url = require('url');
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) {
socket.emit('ok 1', { hello: 'world' });
});
socket.on('clientMSG', function (data) {
socket.emit('ok 2', { hello: 'world' });
});
});
si puedo acceder a un HTML que se conectan a este servidor, funciona, pero tengo que ir a mydomian.com:8080 /index.html. Lo que quiero es poder ir a mydomian.com/index.html. y ser capaz de abrir una conexión de socket:
<script>
var socket = io.connect('http://mydomain.com', {port: 8080});
socket.on('news', function (data) {
console.log(data);
socket.emit('my other event', { my: 'data from the client' });
});
socket.on('connect', function (data) {
console.log("connect");
});
socket.on('disconnect', function (data) {
console.log("disconnect");
});
//call this function when a button is clicked
function sendMSG()
{
console.log("sendMSG");
socket.emit('clientMSG', { msg: 'non-scheduled message from client' });
}
</script>
En este ejemplo, tuve que usar fs.readFile de costumbre trabajo cuando voy al puerto 8080 en la URL.
¿Alguna sugerencia? Tks.
Pruebe nginx en lugar de apache, especialmente si solo desea mostrar archivos estáticos. Apache inicia un nuevo hilo para cada solicitud que es parcialmente contrario a la filosofía/razón de usar el nodo. – badunk