Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/36.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 检查节点网络套接字是否正在进行工作_Node.js_Sockets - Fatal编程技术网

Node.js 检查节点网络套接字是否正在进行工作

Node.js 检查节点网络套接字是否正在进行工作,node.js,sockets,Node.js,Sockets,是否有可能检查套接字当前是否工作(即:主动发送或接收数据)? 我查了一下,但找不到任何相关的 在我的例子中,套接字客户端和节点服务器之间有一个开放的套接字。当HTTP客户机发出请求时,服务器会在后台与套接字客户机通信 问题是,如果列出文件当前正在进行,并且我请求重命名文件,则第一个请求会阻止该操作。我的解决方案是在节点服务器和套接字客户端之间有多个开放的套接字,以便并行化请求 为了知道我可以使用哪个套接字进行请求,我需要知道它是否空闲或正在处理另一个请求(例如:尤其是在文件下载/上载过程中) 您

是否有可能检查套接字当前是否工作(即:主动发送或接收数据)? 我查了一下,但找不到任何相关的

在我的例子中,套接字客户端和节点服务器之间有一个开放的套接字。当HTTP客户机发出请求时,服务器会在后台与套接字客户机通信

问题是,如果
列出文件
当前正在进行,并且我请求
重命名文件
,则第一个请求会阻止该操作。我的解决方案是在节点服务器和套接字客户端之间有多个开放的套接字,以便并行化请求

为了知道我可以使用哪个套接字进行请求,我需要知道它是否空闲或正在处理另一个请求(例如:尤其是在文件下载/上载过程中)


您可以为每个套接字指定一个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) {
    // ...
}

我知道我可以手动执行逻辑,但我想问的是一个官方的、可靠的解决方案。您可以尝试使用套接字的
end
事件。
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) {
    // ...
}
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(...)
}