首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >检查节点网络套接字是否正在工作

检查节点网络套接字是否正在工作
EN

Stack Overflow用户
提问于 2016-04-05 22:43:00
回答 1查看 91关注 0票数 0

是否有可能检查net套接字当前是否正在工作(例如:主动发送或接收数据)?我查了documentation但我找不到任何相关的东西。

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

问题是,如果list-files当前正在运行,而我请求rename-file,则该操作会被第一个请求阻塞。我的解决方案是在节点服务器和套接字客户端之间有多个打开的套接字,以便并行处理请求。

为了知道我可以使用哪个套接字来请求,我需要知道它是空闲的还是已经在处理另一个请求(例如:尤其是当文件下载/上传正在进行时)。

代码语言:javascript
复制
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) {
    // ...
}
EN

回答 1

Stack Overflow用户

发布于 2016-04-05 23:15:23

您可以为每个套接字分配一个ID并添加一个数组workingSockets

代码语言:javascript
复制
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现在是一个包含JSON对象的数组:

代码语言:javascript
复制
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
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36429614

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档