【问题标题】:Create sockettimeoutexception with node js server使用节点 js 服务器创建 sockettimeoutexception
【发布时间】:2016-10-04 08:22:18
【问题描述】:

所以我修改了这个线程 How do I shutdown a Node.js http(s) server immediately? 中接受的答案,并且能够关闭我的 nodejs 服务器。

// Create a new server on port 4000
var http = require('http');
var server = http.createServer(function (req, res) { res.end('Hello world!'); }).listen(4000);

// Maintain a hash of all connected sockets
var sockets = {}, nextSocketId = 0;
server.on('connection', function (socket) {
  // Add a newly connected socket
  var socketId = nextSocketId++;
  sockets[socketId] = socket;
  console.log('socket', socketId, 'opened');

  // Remove the socket when it closes
  socket.on('close', function () {
    console.log('socket', socketId, 'closed');
    delete sockets[socketId];
  });

});


...
when (bw == 0) /*condition to trigger closing the server*/{
  // Close the server
  server.close(function () { console.log('Server closed!'); });
  // Destroy all open sockets
  for (var socketId in sockets) {
    console.log('socket', socketId, 'destroyed');
    sockets[socketId].destroy();
  }
}

但是,在客户端,由于 server.close() 语句,客户端会抛出 ConnectionException。我希望客户端抛出 SocketTimeoutException,这意味着服务器处于活动状态,但套接字只是挂起。其他人可以使用 Java 的码头服务器来做到这一点

Server jettyServer = new Server(4000);
...
when (bw == 0) {
  server.getConnectors()[0].stop();
}

有可能实现这样的目标吗?我已经坚持了一段时间,非常感谢任何帮助。谢谢。

【问题讨论】:

    标签: node.js sockets server jetty


    【解决方案1】:

    你问的是不可能的。从未终止但在超时期间未传递任何数据的连接读取时,会引发SocketTimeoutException

    连接关闭不会导致它。它也不会导致ConnectionException,因为没有这样的事情。它会导致EOFExceptionreadLine() 的 null 返回、read() 的 -1 返回,或者如果关闭失败,则返回 IOException: connection reset

    你的问题没有意义。

    【讨论】:

    猜你喜欢
    • 2021-07-02
    • 2013-03-29
    • 2020-02-29
    • 2018-10-24
    • 2016-07-16
    • 2011-07-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多