sockets - Node.js 未捕获套接字异常 - 套接字已关闭

标签 sockets node.js promise

问题就在这里。我在写入关闭的套接字时遇到异常,并且该异常没有被 try catch 捕获,大概是因为它位于 promise 内。

promise.then(function (val) {
  try {
    sock.write(val + tcpDelimiter);
  } catch (err) {
    logger.info('yeah right this will not work at all');
  }
})
.fail(function (error) {});

此外,将 process.uncaughtException 添加到主应用程序也没有帮助。

这是控制台输出:

 2012-10-04T19:22:21.109Z - error: uncaughtException date=Thu Oct 04
 2012 19:22:21 GMT+0000 (UTC), pid=21508, uid=0, gid=0,
 cwd=/home/ec2-user/js-proxy, execPath=/usr/bin/nodejs,
 version=v0.6.18, argv=[/usr/local/bin/node,
 /home/ec2-user/js-proxy/app.js, --jsproxy], rss=13914112,
 heapTotal=5634752, heapUsed=4082564, loadavg=[0.0380859375,
 0.08056640625, 0.060546875], uptime=1721344.103162099, trace=[column=19, file=net.js, function=Socket._write, line=474,
 method=_write, native=false, column=15, file=net.js,
 function=Socket.write, line=466, method=write, native=false,
 column=24, file=/home/ec2-user/js-proxy/app.js, function=null,
 line=408, method=null, native=false, column=32,
 file=/home/ec2-user/js-proxy/node_modules/q/q.js, function=_fulfilled,
 line=860, method=null, native=false, column=34,
 file=/home/ec2-user/js-proxy/node_modules/q/q.js, function=null,
 line=881, method=null, native=false, column=9,
 file=/home/ec2-user/js-proxy/node_modules/q/q.js,
 function=makePromise.promiseSend, line=553, method=promiseSend,
 native=false, column=28,
 file=/home/ec2-user/js-proxy/node_modules/q/q.js, function=null,
 line=880, method=null, native=false, column=9,
 file=/home/ec2-user/js-proxy/node_modules/q/q.js,
 function=makePromise.promiseSend, line=553, method=promiseSend,
 native=false, column=35,
 file=/home/ec2-user/js-proxy/node_modules/q/q.js, function=, line=465,
 method=null, native=false, column=38, file=node.js,
 function=EventEmitter._tickCallback, line=190, method=_tickCallback,
 native=false], stack=[Error: This socket is closed.,     at
 Socket._write (net.js:474:19),     at Socket.write (net.js:466:15),   
 at /home/ec2-user/js-proxy/app.js:408:24,     at _fulfilled
 (/home/ec2-user/js-proxy/node_modules/q/q.js:860:32),     at
 /home/ec2-user/js-proxy/node_modules/q/q.js:881:34,     at
 makePromise.promiseSend
 (/home/ec2-user/js-proxy/node_modules/q/q.js:553:9),     at
 /home/ec2-user/js-proxy/node_modules/q/q.js:880:28,     at
 makePromise.promiseSend
 (/home/ec2-user/js-proxy/node_modules/q/q.js:553:9),     at
 Array.<anonymous>
 (/home/ec2-user/js-proxy/node_modules/q/q.js:465:35),     at
 EventEmitter._tickCallback (node.js:190:38)]

更新:我参加了 Node.js 演讲并了解了一些有关异常处理的知识;显然它很糟糕并且被忽视了。正在处理中。

最佳答案

最简单的修复似乎是在写入之前检查套接字是否可写。您还可以检查被毁坏的属性(property)。这些东西都是在套接字关闭事件中设置的。

promise.then(function (val) {
  if( sock.writable ){
    sock.write(val + conf.proxy.tcpDelimiter);
  } else {
    logger.info('this works');
  }
})
.fail(function (error) {});

关于sockets - Node.js 未捕获套接字异常 - 套接字已关闭,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12735285/

相关文章:

multithreading - 在独立 Perl 脚本中使用 Mojo::Promise

c++ - 使用 boost socket ,我只需要一个io_service吗?

java - 套接字超时异常 : Read timed out httpclient

sockets - 如何在 Rust 中将 SocketAddr 转换为字符串?

javascript - 在 Node.js 和 Knex 中向现有表添加列

windows - 从NodeJs启动一个独立的进程

java - Socket InputStream 在读取 block 中的字节时出现故障

javascript - 为什么我收到 ReferenceError : Response is not defined?

javascript - 一旦 promise 得到解决,如何在 catch 中传递错误?

javascript - 如何实现可取消、有序的 promise ?