2013-05-02 127 views
1

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

第一个节点应用

 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. 
+0

请参阅[this](https://github.com/LearnBoost/socket.io-client#nodejs)。 – robertklep 2013-05-02 06:09:53

+1

@robertklep如果我在下面添加如下代码.im得到TypeError:object不是函数错误。 var socket = require('socket.io-client')('http:// localhost:3000'); – sachin 2013-05-02 06:35:42

+0

你是对的,语法已经改变。看到我的答案。 – robertklep 2013-05-02 07:37:54

回答

2

您需要在您的第一个应用程序创建一个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事件。

编辑请参阅this gist进行独立演示。这三个文件保存到一个目录,启动服务器:

在浏览器中
node serverserver & 
node clientserver 

而公开http://localhost:3012

+0

好吧,我会尝试这一个 – sachin 2013-05-02 07:45:03

+0

嗨在第三行im连接我的第二个应用程序,如下所示..是否正确... var client = clientio.connect('http:// localhost:6509'); – sachin 2013-05-02 07:49:10

+0

你需要使用'http:// localhost:6509'(加上'http://'前缀) – robertklep 2013-05-02 07:54:05

相关问题