2014-09-10 3 views
0

Я два Linux-коробку и мобильный клиент с запасом-браузером и хочу достичь:socket.io на нескольких машинах

линукса-бокс-1 (мастер) создает HTTP-сервер, сервера HTTP -поперечник и nodejs с Socket.io по

var app = require('http').createServer(handler) 
var io = require('socket.io')(app); 
var fs = require('fs'); 
var i = 1; 
app.listen(80); 

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.on('connection', function (socket) { 
    socket.emit('news', { hello: 'world' }); 
}); 

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

<html> 
<body> 
<script src="/socket.io/socket.io.js"></script> 
<script> 
    var socket = io('http://192.168.0.109/'); 
    socket.on('news', function (data) { 
    console.log(data); 
    }); 
</script> 
<button type="button" onclick="socket.emit('foto', { my: 'data' });">Click Me!</button> 
</body> 
</html> 

Теперь, моя проблема в том, что я хочу второй linux- для запуска nodejs и socket.io и может получить это событие, которое я испускаю. У меня нет абсолютно никакого понятия, как этот код должен выглядеть так, как я не нашел никакого примера для такого приложения.

Может ли кто-нибудь помочь?

Спасибо !!!

ответ

1

Вы можете создать еще один сокет на клиенте, который подключается ко второму серверу. Затем вместо того, чтобы испускать событие onClick только для одного сокета, вы можете вызвать функцию, которая передает это событие в оба сокета.

Если вы написали пример ниже, который основан на вашем примере. Но в отличие от вашей среды он имитирует два linux-бокса, запуская два приложения как на одном сервере, так и на разных портах.

код для серверов:

//servers.js 
//run with: node servers.js 
var app = require('http').createServer(handler) 
var io = require('socket.io')(app); 
var fs = require('fs'); 
var i = 1; 
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.on('connection', function (socket) { 
    socket.emit('news', { hello: 'world' }); 
    socket.on ('foto', function (data) { 
    console.log ('server1'); 
    console.log (data); 
    }); 
}); 

var app2 = require('http').createServer(handler) 
io2 = require('socket.io')(app2); 
app2.listen (8081); 

io2.on('connection', function (socket) { 
    socket.on ('foto', function (data) { 
    console.log ('server2');and connect 
    console.log (data); 
    }); 
}); 

код клиента в index.html:

<html> 
<body> 
<script src="/socket.io/socket.io.js"></script> 
<script> 
    var socket = io.connect('http://localhost:8080/'); 
    var socket2 = io.connect('http://localhost:8081/'); 
    socket.on('news', function (data) { 
    console.log(data); 
    }); 
    function myclick() { 
    console.log("click"); 
    socket.emit('foto', { my: 'data' }); 
    socket2.emit('foto', { my: 'data' }); 

    } 
</script> 
<button type="button" onclick="myclick();">Click Me!</button> 
</body> 
</html> 

Используйте ваш браузер и перейдите к http://localhost:8080 или http://localhost:8081. Оба должны работать, поскольку оба они запускают одно и то же приложение. Когда вы нажимаете кнопку, оба сервера будут записывать данные в командную строку.

+0

Это действительно сработало. Большое спасибо!!!!! – goetzmoritz