如何连接两个Socket.io服务器/应用程序?
我想建立一个有两个组件的应用程序。有一个面向公众的组件和行政部门。每个组件将在不同的服务器上托管,但两人将访问同一个数据库。我需要设置行政部分,以便能够将消息发送到面向公众的组件来查询数据库和信息发送到所有的公共客户端。
我无法弄清楚是如何设置两个组件之间的连接。我使用的是由Socket.io提供的标准的HTTP服务器设置。
在每个服务器:
var app = require('http').createServer(handler)
, io = require('socket.io').listen(app)
, fs = require('fs')
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.sockets.on('connection', function (socket) {
socket.emit('news', { hello: 'world' });
socket.on('my other event', function (data) {
console.log(data);
});
});
而每个客户端上:
<script src="/socket.io/socket.io.js"></script>
<script>
var socket = io.connect('http://localhost');
socket.on('news', function (data) {
console.log(data);
socket.emit('my other event', { my: 'data' });
});
</script>
我看了this question但不能真正按照所提供的答案,我认为情况有所不同。我只需要一台服务器,以便能够从自己的一套客户消息发送到其他服务器,并仍可发送/接收消息/。
我全新到节点(因此,插座),所以一些解释是难以置信的帮助。
回答如下:我能找到最容易做的事情是简单地创建使用socket.io客户端服务器之间的客户端连接。在我的情况,管理服务器连接到客户端服务器:
var client = require("socket.io-client");
var socket = client.connect("other_server_hostname");
然后在管理端动作可以将消息发送到管理服务器,管理服务器可以使用该客户端连接将信息转发给客户端服务器。
在客户端服务器,我对“adminMessage”功能创建和检查其他一些信息,以验证该消息来自像这样来了:
io.sockets.on('connection', function (socket) {
socket.on('adminMessage', function (data) {
if(data.someIdentifyingData == "data") {
// DO STUFF
}
});
});