2016-08-31 16 views
0

socket-ioを使用しているnode.js上のhttpサーバーが実行されていません。私はnpm install socket-ioと実行中のサーバを使いました。node.jsでsocket-ioを実行しているHttpサーバーが実行されていません

これはサーバーのコードです。

var static = require('node-static'); 
var http = require('http'); 
// Create a node-static server instance 
var file = new(static.Server)(); 

// We use the http moduleÕs createServer function and 
// rely on our instance of node-static to serve the files 
var app = http.createServer(function (req, res) { 
    file.serve(req, res); 
}).listen(8181); 

// Use socket.io JavaScript library for real-time web applications 
var io = require('socket.io').listen(app); 

// Let's start managing connections... 
io.sockets.on('connection', function (socket){ 

     // Handle 'message' messages 
     socket.on('message', function (message) { 
       log('S --> got message: ', message); 
       // channel-only broadcast... 
       socket.broadcast.emit('message', message); 
     }); 

     // Handle 'create or join' messages 
     socket.on('create or join', function (room) { 

       /*var namespace = '/'; 
       for (var numClients in io.nsps[namespace].adapter.rooms[room]) { 
        console.log(numClients); 
       }*/ 

       //var numClients = io.sockets.clients(room).length; 

       var numClients = io.sockets.adapter.rooms[room]!=undefined ? Object.keys(io.sockets.adapter.rooms[room]).length:0; 

       log('SERVER: CLIENTS ' + room + ' has ' + numClients + ' client(s)'); 

       log('S --> Room ' + room + ' has ' + numClients + ' client(s)'); 
       log('S --> Request to create or join room', room); 

       // First client joining... 
       if (numClients == 0){ 
         socket.join(room); 
         socket.emit('created', room); 
       } else if (numClients == 1) { 
       // Second client joining...     
         io.sockets.in(room).emit('join', room); 
         socket.join(room); 
         socket.emit('joined', room); 
         log('S: sent JOIN message'); 
       } else { // max two clients 
         socket.emit('full', room); 
       } 
     }); 

     function log(){ 
      var array = [">>> "]; 
      for (var i = 0; i < arguments.length; i++) { 
       array.push(arguments[i]); 
      } 
      socket.emit('log', array); 
     } 
}); 

これはソケットに接続しているクライアントのコードですが:netstat -a COMANDで

var room = getParameterByName('room_name'); 

alert ("room_name: "+room); 

// Connect to signalling server 
var socket = io.connect(); 

// Send 'Create or join' message to singnalling server 
if (room !== '') { 
    console.log('Create or join room', room); 
    socket.emit('create or join', room); 
} 

私は、サーバーのポートがアクティブであるものを見ました..しかし、それは、メッセージを送信しません。

私は別の質問があります。サーバーはブロードキャストではなく特定のピアにメッセージを送信する方法を教えてください。つまり、代わりに

socket.on('message', function (message) { 
      log('S --> got message: ', message); 
      // channel-only broadcast... 
      socket.broadcast.emit('message', message); 
    }); 

私はどうすればいいですか?ありがとう!

+0

「実行していません」とは何ですか?あなたはどんな具体的なエラーを観察していますか?あなたのサーバーに接続しようとすると、ブラウザはコンソールで何を言うのですか?サーバーコンソールには何が表示されますか?このような質問には、非常に具体的な観測を含める必要があり、基本的なデバッグを既に行ったことを示す必要があり、そのデバッグを行う際に見つかったことを説明する必要があります。 – jfriend00

答えて

0

私は別の質問があります:サーバがブロードキャストではないメッセージをどのように送信するのですか? 特定のピアに接続していますか?

socket.on('message', function (message) { 
    log('S --> got message: ', message); 
    // channel-only broadcast... 
    socket.emit('message', "got your message"); 
}); 

あるいは、もし:

あなたの質問の2番目の部分は、あなただけのあなたにメッセージを送った同じソケットに送り返すために、このような単一ソケットに送信するsocket.emit()を行うということです他の接続されたクライアントのソケットID値がある場合は、次のようにサーバー上のソケットを取得できます。

io.sockets.connected[id].emit(...) 
+0

ご意見ありがとうございます。あなたに質問があります:ソケットIDをソケットクライアントにどのように付加できますか?ありがとう! – pier92

+0

@ pier92 - すべてのsocket.ioソケットにはすでに 'socket.id'があります。これはsocket.ioによって自動的に作成されます。 – jfriend00

+0

もう一度ありがとう。最後の質問。私は試験のためにWebRtc通信にこのサーバを使用しています。このサーバーは最大2クライアントでサポートされています。この制約を削除すると、どうすればいいですか?私はあなたを私のgitlabにリダイレクトします:http://dev.conf.meetecho.com/AT-Projects/SAVA/tree/master/CompleteNodeServerWithDataChannelOReillyReview – pier92

関連する問題