2013-05-02 125 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

相關問題