2016-04-05 26 views
0

netソケットが現在動作しているかどうか(つまり、積極的にデータを送受信しているかどうか)をチェックする可能性はありますか? documentationを確認しましたが、関連するものが見つかりませんでした。ノードネットソケットの処理中であることを確認してください

私の場合、私はソケットクライアントとノードサーバーの間にオープンソケットを持っています。 HTTPクライアントが要求を行うと、サーバーはソケットクライアントと通信します。

list-filesが現在進行中で、私がrename-fileを要求した場合、その操作は最初の要求によってブロックされます。私の解決策は、要求を並列化するために、ノード・サーバーとソケット・クライアントの間に複数のオープン・ソケットを置くことです。

リクエストに使用できるソケットを知るには、アイドル状態であるか、別のリクエストで既に動作しているかどうかを知る必要があります(特に、ファイルのダウンロード/アップロードが進行中の場合など)。

var clientSockets = [] 

router.post('/list-files', function(req, res) { 
    var clientSockets = clientSockets.filter(function(currSocket) { 
     return currSocket.userID === "[email protected]" 
    }) 

    // What should I do here? 
    // var availableClientSocket = clientSockets.filter(

    writeMessageToSocket(availableClientSocket, socketReq.fromHttpReq(req)) 
    readMessageFromSocket(availableClientSocket, socketRes) 

    res.write(socketRes) 
} 

router.post('/rename-file', function(req, res) { 
    // ... 
} 

答えて

0

あなたはすべてのソケットにIDを与えると、アレイworkingSockets追加することができます:

var clientSockets = [] 
var workingSockets = [] 

router.post('/list-files', function(req, res) { 
    var availableSocket; 
    for(var i = 0; i < clientSockets.length; i++) { 
     for(var k = 0; k < workingSockets.length; k++) { 
      if(workingSockets[k] === clientSockets[i].id) return 
     } 
     if(clientSockets[i].socket.userID === "[email protected]") availableSocket = clientSockets[i] 
    } 

    writeMessageToSocket(availableClientSocket.socket, socketReq.fromHttpReq(req)) 
    readMessageFromSocket(availableClientSocket.socket, socketRes) 

    res.write(socketRes) 

    workingSockets.splice(workingSockets.indexOf(availableSocket.id), 1) 
} 

router.post('/rename-file', function(req, res) { 
    // ... 
} 

を、あなたのコードビットを書き換える必要があります:あなたのclientSocketsは今、JSONオブジェクトを含む配列です。

var object = { 
    id: '123', // You need a unique ID for every socket. It's very important that there 
       // exists exactly one socket with that ID. Otherwise, the code breaks. 
    socket: new net.Socket(...) 
} 
+0

私は手動でロジックを行うことができますが、公式で信頼できる解決策を求めています。 –

+0

ソケットの 'end'イベントを利用することができます。 https://nodejs.org/api/net.html#net_class_net_socket – Benni

関連する問題