Sto cercando un modo per integrare Node.js + Socket.io + Apache nel modo seguente: Desidero che apache continui a pubblicare file HTML/JS. Voglio node.js per ascoltare per la connessione sulla porta 8080. Qualcosa di simile a questo: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' });
});
});
se accedo un codice HTML che si collegano a questo server, funziona, ma ho bisogno di andare a mydomian.com:8080 /index.html. Quello che voglio è poter andare su mydomian.com/index.html. ed essere in grado di aprire una connessione 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>
In questo esempio dovuto usare fs.readFile di solito lavoro quando vado alla porta 8080 nella URL.
Qualche suggerimento? Tks.
Provate nginx invece di apache, specialmente se volete solo servire file statici. Apache avvia un nuovo thread per ogni richiesta che è parzialmente in contrasto con la filosofia/ragione dell'utilizzo del nodo. – badunk