在使用nodejs DNS负载平衡+ socket.io + socket.io-redis时出现EAGAIN错误。 我该如何解决?

服务器定期打开一个文本文件来添加或更改内容。 一台服务器没有问题,但在负载平衡和使用redis连接服务器和两台服务器共享文件夹之后,会发生EAGAIN错误。

从服务器1连接多个客户端并引用相同的文本文件并更改内容没有任何问题。 服务器1的客户端和服务器2的客户端引用相同的文本文件时,这是一个不规则的错误。 我该如何解决?

++我们发现了这个问题。 与nfs共享文件夹时,如果共享文件夹的根目录是服务器1,则服务器1上的EAGAIN错误相反,如果共享文件夹的根目录是服务器2,则会在服务器2上发生错误EAGAIN。如果设置了另一台服务器上的共享文件夹进行testing,并将服务器1和服务器2连接到另一台服务器上的共享文件夹,则不会出现错误。 为什么?

服务器configuration

DNS load balancing nodejs(socket.io,socket.io-redis) SERVER 1, 2 redis 

npm模块版本:

 express@4.13.4 socket.io@1.5.0 socket.io-redis@1.1.1 socket.io-adapter@0.5.0 fs@0.0.1 multer@0.1.8 

js文件:

 var express = require('express'); var multer = require('multer'); var app = express(); var http = require('http').Server(app); var io = require('socket.io')(http); var mysql = require('mysql'); var fs = require('fs'); var request = require("request"); var fcm = new FCM(apiKey); var redis = require('socket.io-redis'); io.adapter(redis({host:'xxxxxxxxxxxx',port:xxxx})); http.listen(port, function(){ console.log('listening1 on *:'+port); }); io.sockets.on('connection', function(socket){ socket.on('setchat', function(data){ var obj=JSON.parse(data); var txtfile = fs.readFileSync('./room/'+obj.roomid+".txt", 'utf8'); ... ... ... ... }); socket.on('getcount', function(data){ var txtfile = fs.readFileSync('./room/'+data+".txt", 'utf8'); var chatRoom=JSON.parse(txtfile); var strChatroom = JSON.stringify(chatRoom); fs.open('./room/'+data+".txt", 'w', function(err, fd) { if(err) throw err; var buf = new Buffer(strChatroom); fs.write(fd, buf, 0, buf.length, null, function(err, written, buffer) { if(err) throw err; fs.close(fd, function() { console.log('getcount Done'); }); }); }); }); }); 

错误代码:

 Error: EAGAIN: resource temporarily unavailable, open './room/chattingtext.txt at Error (native) 

chattingtext.txt:

 {"totalmember":{"id":"name","id":"name"},"nowmember":["name"],"msginfo":[{"index":1,"user":"name","message":"asdasd","count":0,"date":"13:45"}]}