-
Notifications
You must be signed in to change notification settings - Fork 94
Expand file tree
/
Copy pathnetProxy.js
More file actions
71 lines (68 loc) · 2.07 KB
/
netProxy.js
File metadata and controls
71 lines (68 loc) · 2.07 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
let net = require('net');
let fs = require('fs');
let http = require('http');
let server = net.createServer({
// 如果 pauseOnConnect 被设置为 true, 那么与连接相关的套接字都会暂停,也不会从套接字句柄读取数据。 这样就允许连接在进程之间传递,避免数据被最初的进程读取。 如果想从一个暂停的套接字开始读数据
// pauseOnConnect: true,
allowHalfOpen: true
}, (socket) => {
socket.setEncoding('utf8');
let {
port,
address
} = socket.address();
console.log(socket.address());
let stream = fs.createWriteStream('message.txt');
socket.on('data', (data) => {
console.log(data);
});
socket.on('end', () => {
console.log('client disconnected');
});
//接收到客户端发送的错误就会调用
socket.on('error', (err) => {
console.log("error");
});
socket.on('close', () => {
console.log("close socket");
});
socket.end(`
HTTP/1.1 200 OK
Content-Type: text/plain
Content-Length: 5
hello`)
socket.pipe(stream);
// let realReq = http.request((realRes) => {
// // 设置客户端响应状态码
// res.writeHead(realRes.statusCode);
// // 通过pipe的方式把真正的服务器响应内容转发给客户端
// realRes.pipe(res);
// });
// socket.pipe(realReq);
socket.on('finish', () => {
console.log('Done');
});
});
server.listen(3000, () => {
console.log('opened server on', server.address({}));
});
server.on('connection', (socket) => {
console.log('connection');
});
server.on('listening', function () {
console.log('app is listening at ', server.address());
})
//server.unref();//停止node对server的监听事件
//服务器关闭事件
server.on('close', (socket) => {
console.log('close server');
});
server.on('error', (e) => {
if (e.code === 'EADDRINUSE') {
console.log('Address in use, retrying...');
setTimeout(() => {
server.close();
server.listen(PORT, HOST);
}, 1000);
}
});