Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/40.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sockets Node.js未捕获套接字异常-套接字已关闭_Sockets_Node.js_Promise - Fatal编程技术网

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

Sockets Node.js未捕获套接字异常-套接字已关闭,sockets,node.js,promise,Sockets,Node.js,Promise,问题出在这里。我在向封闭套接字写入时遇到异常,而该异常不会被try-catch捕获,可能是因为它在承诺中 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.

问题出在这里。我在向封闭套接字写入时遇到异常,而该异常不会被try-catch捕获,可能是因为它在承诺中

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)]
2012-10-04T19:22:21.109Z-错误:未捕获异常日期=2004年10月4日星期四
2012年19:22:21 GMT+0000(UTC),pid=21508,uid=0,gid=0,
cwd=/home/ec2 user/js proxy,execPath=/usr/bin/nodejs,
版本=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.0805664625,0.060546875],正常运行时间=1721344.103162099,跟踪=[column=19,file=net.js,function=Socket.\u write,line=474,
方法=_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,
行=408,方法=null,本机=false,列=32,
file=/home/ec2 user/js proxy/node\u modules/q/q.js,函数=\u已完成,
行=860,方法=null,本机=false,列=34,
file=/home/ec2 user/js proxy/node_modules/q/q.js,function=null,
行=881,方法=null,本机=false,列=9,
file=/home/ec2 user/js proxy/node_modules/q/q.js,
函数=makePromise.promiseSend,行=553,方法=promiseSend,
native=false,column=28,
file=/home/ec2 user/js proxy/node_modules/q/q.js,function=null,
行=880,方法=null,本机=false,列=9,
file=/home/ec2 user/js proxy/node_modules/q/q.js,
函数=makePromise.promiseSend,行=553,方法=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,
函数=EventEmitter.\u tickCallback,行=190,方法=\u tickCallback,
native=false],stack=[错误:此套接字已关闭,位于
Socket._write(net.js:474:19),在Socket.write(net.js:466:15)中,
at/home/ec2 user/js proxy/app.js:408:24,at\u
(/home/ec2 user/js proxy/node_modules/q/q.js:860:32),位于
/home/ec2 user/js proxy/node_modules/q/q.js:881:34,位于
允诺
(/home/ec2 user/js proxy/node_modules/q/q.js:553:9),位于
/home/ec2 user/js proxy/node_modules/q/q.js:880:28,在
允诺
(/home/ec2 user/js proxy/node_modules/q/q.js:553:9),位于
数组。
(/home/ec2 user/js proxy/node_modules/q/q.js:465:35),位于
EventEmitter._tickCallback(node.js:190:38)]

更新:我参加了一次Node.js讲座,学到了一些异常处理的知识;显然,它很糟糕,被忽视了。正在对其进行处理。

最简单的修复方法似乎是在写入之前检查套接字是否可写。你也可以检查被毁的财产。这些都是在套接字关闭事件中设置的

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

最简单的修复方法似乎是在写入之前检查套接字是否可写。你也可以检查被毁的财产。这些都是在套接字关闭事件中设置的

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