相关疑难解决方法(0)

为什么NodeJS KeepAlive似乎没有按预期工作?

引自TCP keepalive HowTo:

为了理解什么是TCP keepalive(我们将调用keepalive),你只需要读取名称:保持TCP活着.这意味着您将能够检查连接的套接字(也称为TCP套接字),并确定连接是否仍在运行或是否已断开.

那么,为什么以下代码在互联网连接断开时不会抛出某些东西

var tls = require('tls');

var socket = tls.connect(443, "google.com", function connected() {
  console.log('connected');
});

socket.setNoDelay(true);
socket.setKeepAlive(true, 0);
socket.setTimeout(0, function(){
  console.log('timeout');
});
socket.on('data', function(data) {
  console.log(data);
});
socket.on('close', function() {
  console.error("close");
});
socket.on('error', function(err) {
  console.error("error", err);
});
Run Code Online (Sandbox Code Playgroud)

使用NodeJS v0.10.17在MacOS/Debian上测试

sockets tcp node.js

5
推荐指数
1
解决办法
6689
查看次数

如何在 NodeJS 中测试 socket.setKeepAlive

我尝试在 NodeJS 中测试 setKeepAlive() 的功能。我在同一本地网络的不同机器上运行 Server.js 和 client.js。然后,我关闭了客户端机器上的 wifi 连接(断开互联网连接)。15 分钟后,仍然没有消息抛出。这是为什么?没有 setKeepAlive() 工作吗?

这是服务器和客户端的代码:

客户端.js

var net = require('net');
var HOST = '192.168.0.16';
var PORT = 8333;

var client = net.connect(PORT, HOST, function connected(){
    console.log('connected');
});

client.setKeepAlive(true, 1);
client.write('hi server');

client.on('data', function(data) {
    console.log('Received' + data);
});

client.on('close', function(){
    console.error('connection closed');
)};

client.on('error', function(err){
    console.error('error', err);
});
Run Code Online (Sandbox Code Playgroud)

服务器.js

var net = require('net');
var HOST = '192.168.0.16';
var PORT = 8333;

net.createServer(function(sock) {
    console.log('CONNECTED: ' + sock.remoteAddress + ':' + sock.remotePort); …
Run Code Online (Sandbox Code Playgroud)

sockets tcp node.js

5
推荐指数
1
解决办法
3815
查看次数

标签 统计

node.js ×2

sockets ×2

tcp ×2