1

私のアプリケーションでは、2 つの 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

    });

     });

2 番目のノード アプリケーション

    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.
4

1 に答える 1

3

最初のアプリで 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
  });
});

2 つ目のアプリでは、これらのイベントをリッスンします。

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

connect上記のコードは、イベントをクライアント ソケットに渡す前にクライアント ソケットでイベントを待機しないため、競合状態が発生します。

編集スタンドアロンのデモについては、この要点を参照してください。3 つのファイルをディレクトリに保存し、サーバーを起動します。

node serverserver &
node clientserver

http://localhost:3012ブラウザで開きます。

于 2013-05-02T07:37:20.970 に答える