欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

[网络代理模块]反向代理(如下所示)

最编程 2024-10-14 12:41:29
...

1 反向代理部署遇到的问题

1.1 通道异常断开导致数据丢失

将外网程序布置在云服务器上(外网)测试,ssh协议进行测试会莫名其快通道断开,发现丢了一个报文。丢报文的原因是:我们内网模块从命令通道接收到外网模块发来的的ip和port后需要对外网模块和目标IP和port建立TCP连接的时候,这里的连接是非阻塞的,在三次握手没有完成之前,向socket中写入数据会失败,所以丢了一个报文。

可以在TCP连接外网和TCP连接目标IP和port后面加一行sleep(1)休眠1s,发现解决了数据丢失问题,但这不是解决问题的方法。

解决问题的方法是像正向代理一样最后对EPOLLIN和EPOLLOUT的操作。

1.2 定时器与心跳

跟正向代理一样,对内网程序来说定时器到了有两件事可以做:

1)设置进程的心跳;

2)清理空闲的客户端socket。

对外网程序来说,定时器到了有三件事情可做:

1)更新进程的心跳;

2)向命令通道发送心跳报文;

3)清理空闲的客户端socket。

一定要做心跳报文,如果不做心跳报文,TCP连接时间长了会被强制断开;心跳很简单,设置一个字符串传过去就行了。

推荐阅读