socket.io在多台机器上

时间:2014-09-10 21:06:09

标签: javascript linux node.js socket.io

我有两个linux-box和一个带有股票浏览器的移动客户端,并希望实现这一目标:

linux-box-1(master)用socket.io创建http-server,服务器http-content和nodejs

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-box运行nodejs和socket.io并且能够接收我发出的这个事件。 我完全不知道这段代码应该是什么样子,因为我没有找到任何这种应用程序的例子。

有人可以帮忙吗?

感谢!!!

1 个答案:

答案 0 :(得分:1)

您可以在客户端上创建另一个连接到第二个服务器的套接字。然后,您可以调用一个向两个套接字发出此事件的函数,而不是将onClick上的事件发送到一个套接字。

如果编写了以下基于您的示例的示例。但与您的环境相比,它通过在同一台服务器上但在不同端口上运行这两个应用程序来模拟两个linux-box。

服务器代码:

//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:8080http://localhost:8081。两者都应该工作,因为它们都运行相同的应用程序当您单击该按钮时,两个服务器都会将数据记录到命令行。