是否有可能检查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) {
// ...
}发布于 2016-04-05 23:15:23
您可以为每个套接字分配一个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现在是一个包含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(...)
}https://stackoverflow.com/questions/36429614
复制相似问题