首页 文章

检查节点网络套接字是否正在进行中

提问于
浏览
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 === "user1@example.com"
    })

    // 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) {
    // ...
}

1 回答

  • 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 === "user1@example.com") 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 now现在是一个包含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(...)
    }
    

相关问题