Untitled

mail@pastecode.io avatar
unknown
plain_text
18 days ago
2.3 kB
1
Indexable
Never
Để tái tạo tình huống `recv-q` có giá trị khác 0 bằng Node.js, bạn có thể viết cả server và client sử dụng module `net` của Node.js. Dưới đây là các bước chi tiết:

### Tạo một socket server

Tạo một file tên `server.js`:

```javascript
const net = require('net');

// Tạo server
const server = net.createServer((socket) => {
  console.log('Client connected');

  // Không đọc dữ liệu từ socket, giữ kết nối mở
  socket.on('data', (data) => {
    console.log('Received data but not processing it');
  });
});

server.on('error', (err) => {
  console.error(err);
});

// Lắng nghe trên port 12345
server.listen(12345, () => {
  console.log('Server is listening on port 12345');
});
```

Chạy server này:

```sh
node server.js
```

### Tạo một client gửi dữ liệu

Tạo một file tên `client.js`:

```javascript
const net = require('net');

// Tạo client và kết nối đến server
const client = net.createConnection({ port: 12345 }, () => {
  console.log('Connected to server');

  // Gửi dữ liệu đến server
  client.write('Du lieu gui den server');

  // Giữ kết nối mở và không làm gì thêm
  setInterval(() => {
    client.write('Them du lieu gui den server');
  }, 1000);
});

client.on('error', (err) => {
  console.error(err);
});
```

Chạy client này:

```sh
node client.js
```

### Kiểm tra `netstat`

Sau khi chạy cả server và client, bạn có thể kiểm tra `recv-q` bằng lệnh `netstat`:

```sh
netstat -tn | grep 12345
```

Bạn sẽ thấy giá trị `Recv-Q` khác 0, điều này chỉ ra rằng có dữ liệu trong hàng đợi nhận mà chưa được đọc bởi server.

### Giải thích

- **Server**: Chương trình server tạo một socket server lắng nghe kết nối và chấp nhận kết nối từ client, nhưng không đọc dữ liệu từ socket.
- **Client**: Chương trình client kết nối đến server và gửi dữ liệu liên tục, nhưng không đóng kết nối.

Vì server không đọc dữ liệu từ socket, dữ liệu sẽ tích tụ trong hàng đợi nhận (`Recv-Q`), và bạn sẽ thấy giá trị `Recv-Q` tăng lên trong kết quả của `netstat`.
Leave a Comment