- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我在 NodeJS 中运行一个 restify 服务器。在极少数情况下,大约 0.05% 的 HTTPS 请求会导致 net.js 报告以下错误:
Error: accept EPERM
at exports._errnoException (util.js:742:11)
at TCP.onconnection (net.js:1280:24)
HTTP 请求没有什么特别之处。在报告此错误之前,服务器可能已经处理了数千个请求,甚至响应了数十个相同的请求。我无法找到有关为什么服务器可能会为已成功接受连接几个小时的套接字生成 EPERM 错误的任何信息。
顺便说一句,这个错误发生在我们源代码的任何执行上下文之外。因此,EPERM 并不是关于我们的代码访问文件或执行其他系统调用的。当新请求到达时和调用我们的代码之前,EPERM 发生在 NodeJS TCP 代码的深处。
起初,当错误发生时,它会导致 NodeJS 终止。因此,我添加了代码来捕获应用程序级异常:
process.on("uncaughtException", onUncaughtException );
但由于我不知道为什么会发生此错误,因此完全不清楚恢复过程是什么。
不确定这是否重要,但这里是与启动 restify 服务相关的大部分代码:
var restify = require("restify");
// skipping some other init code
// configuration data is read from a JSON file
var serverOptions = {
name: configuration.server.name,
version: configuration.server.version,
formatters: {
"application/json": jsonResponseFormatter,
"text/html": textResponseFormatter
},
serverOptions.key: fs.readFileSync(configuration.server.sslKey),
serverOptions.cert: fs.readFileSync(configuration.server.sslCert)
}
var server = restify.createServer( serverOptions );
// skipping middleware inits and URL registrations
server.listen(
configuration.server.port, // using HTTPS 443
configuration.server.serverip );
顺便说一下,我们运行的是旧版本的 NodeJS:v0.11.13。我的长期计划是升级到最新的稳定版本,但我们可能几个月都无法更新。
最佳答案
让我在这里留下我的解决方案,以防其他人将来遇到同样的问题。
从技术上讲,我没有发现为什么会发生此错误,但我确实找到了如何成功处理错误情况:陷阱和释放。该错误必须在应用程序级别被捕获,因为它是在我的源代码的任何 try-catch 上下文之外的 net.js 深处生成的。因此,如果我不捕获它,它就会使我的应用程序崩溃。但该错误不是 fatal error ,似乎可以安全地忽略它。在测试中,即使发生此错误,套接字仍继续接收新连接。
process.on("uncaughtException", onUncaughtException );
function onUncaughtException(error) {
// put some code here to log the error occurrence, then ...
if( error.code==="EPERM" && error.syscall==="accept" ) {
// non-fatal error: do nothing; just ignore this error
}
else {
// handle other application errors here
}
}
因此,虽然了解为什么服务器套接字偶尔会出现 EPERM 错误可能仍然很有趣,但现在我很满意知道在错误发生时处理错误的正确方法。 p>
关于javascript - 为什么 NodeJS/restify 服务器*很少*在接受时报告 EPERM?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36203564/
我正在使用 titanium 和 genymotion 作为 android 模拟器。我收到以下错误:- [错误] 触发“执行后”事件时出错[错误] 错误:EPERM,不允许操作 'C:\Users\
我用谷歌搜索 EPERM: operation not permitted 我在 npm 问题和这个错误上得到了很多点击。 这不是我的情况(不是重复的),因为我没有运行 npm,我正在运行我自己的 N
我使用 ngBoilerplate 作为我的应用程序的基础。ngbp 使用 ngAnnotate 和 grunt-ng-annotate 来很好地注释应用程序。 一切都工作正常,直到我必须格式化我的计
我知道这是 node 的常见错误,但我所有的故障排除技术似乎都失败了。 Windows 7(32 位) Node@0.10.10 npm@1.2.25 尝试运行 bower 和 yo (Yeoman)
我在尝试使用 Bower 安装“jQuery”时遇到以下错误堆栈跟踪。有人可以提供帮助吗? C:\study\meanApp>bower install jquery --save b
使用 gulp 和新的 Microsoft bash shell,我正在尝试设置一个 gulp watch 来将我的 scss 编译成 css,这样当编译出错时 watch 不会停止。 我已经设置了一
在Windows 10中使用VS代码时,我一直遇到很多权限问题。 尝试移动文件夹时: 错误:EPERM:不允许进行操作,请重命名“路径a”->“路径b” 删除文件夹时: 它静默失败,该文件夹已从解决方
这是我的MQTTCONECTION类 public class MQTTService extends Service { private static final String T
尝试运行 https://github.com/jakearchibald/wittr 时在 Windows bash 上,我收到以下错误,非常感谢帮助修复或调试它: Development ser
我正在使用 Multer 在我的 fs 中上传图像。 Multer 不允许您动态设置 fs 中的位置,因此我始终在同一文件夹中上传,然后使用 fs.renamesynch 更改文件夹的名称。 我使用同
我已经全局安装了pm2sudo pm2 install -gpm2 启动server.js pm2 状态(给出这个输出)┌──────────┬──────┬────────┬────────┬───
我正在使用我正在编写的内核模块劫持一个特定的系统调用。替换代码是这样的: asmlinkage int custom_setxattr(const char* __user path, const c
我正在尝试为我的项目构建一个 android APK 文件 C:\myApp>cordova build android cp: copyFileSync: could not write to de
我已经将自己的 ext4 磁盘挂载到/mnt/sdb 并将其更改为 777。 但是,当启动数据节点时: /etc/init.d/hadoop-hdfs-datanode 启动 我在日志中收到以下错误(
我很难在我的 Windows 机器上使用 nodejs fs.watch 观看文件夹。删除监视的文件夹时会引发异常。 fs.watch('somedir', function (event,
我有一个 Qt 项目,它使用一个在我的系统上编译良好的插件接口(interface)。然而,当同一个项目在 docker 中编译时,它停止使用 Qt 5.10.1,给出消息错误:未定义的接口(inte
{ 错误:EPERM:不允许操作,打开 'C:\Users\Vivek Sharma\apps\testApp\www\assets\imgs\Thumbs.db’ **错误号:-4048, 代码:‘
目前我正在尝试使用 Webstorm 开发一个 ionic-app。但是 gulp 正在制造一些麻烦。 已安装的包: "gulp": "^3.5.6", "gulp-concat": "^2.2.0"
如果尝试在 USB 设备上构建 node.js 应用程序时在我的树莓派上使用 npm 时遇到一些问题。 package.json 看起来像这样: { "name" : "node-todo",
EACCES 和 EPERM 到底有什么区别? EPERM 描述 here作为“不是 super 用户”,但我通常会将其与 EACCES 联系起来。事实上,我不记得在现实生活中见过 EPERM。 最佳
我是一名优秀的程序员,十分优秀!