如何在Node js中使用Socket.io-client连接两个Socket.io节点应用程序

在我的应用程序中,我需要连接两个socket.io节点应用程序。使用socket.io-client我们可以这样做。但是我不知道socket.io-client是如何工作的以及在哪里包含这些。

第一个节点应用

var express = require('express') , http = require('http'); var app = express(); app.use(function (req, res) { app.use(express.static(__dirname + '/public')); }); var server = http.createServer(app); var io = require('socket.io').listen(server); server.listen(3000); io.sockets.on('connection',function(socket){ socket.on('eventFiredInClient',function(data){ socket.emit('secondNodeAppln',data);// i need to get this event in my 2nd node application how can i do this by using socket.io-client }); }); 

第二节点应用程序

  var express=require('express'); var http=require('http'); var app=express(); app.configure(function(){ app.use(express.static(__dirname + '/public')); }); var server = http.createServer(app); var serverAddress = '127.0.0.1'; var serverPort = 3000; //first node appln port var clientio = require('socket.io-client'); var socket = clientio.connect(serverAddress , { port: serverPort }); socket.on('connect', function(){ console.log('connected'); }); socket.on('disconnect', function(){ console.log('disconnected'); }); var io = require('socket.io').listen(server); server.listen(6509); //here i need to get the 'secondNodeAppln' event raised in first node application.How can i do this. 

您需要在第一个应用程序中创build一个socket.io客户端:

 var io = require('socket.io').listen(server); // this is the socket.io server var clientio = require('socket.io-client'); // this is the socket.io client var client = clientio.connect(...); // connect to second app io.sockets.on('connection',function(socket) { socket.on('eventFiredInClient',function(data) { client.emit('secondNodeAppln', data); // send it to your second app }); }); 

而在你的第二个应用程序,只听这些事件:

 io.sockets.on('connection', function (socket) { socket.on('secondNodeAppln', function(data) { ... }); }); 

有一些竞争条件,因为上面的代码在事件传递给它之前不等待客户端套接字上的connect事件。

编辑看到这个要点独立演示。 将这三个文件保存到一个目录中,启动服务器:

 node serverserver & node clientserver 

并在浏览器中打开http://localhost:3012