比如说我要用C或者C++的socket开发一个端口转发,或者代理服务器之类的程序,提前无法得知用户传入的是多达长度的数据(比如说用户有可能会上传一个几十兆大小的文件),也有可能提交一个有几百kb的大段文字的表单,或者发起一个请求的时候带上10kb大的cookie和头部,还有可能下载一个几百兆大的文件,这种极端情况下,代理服务器中该如何定义IO缓冲区的大小?在开发这类程序碰到这种极端情况的处理需要注意什么?
比如说我要用C或者C++的socket开发一个端口转发,或者代理服务器之类的程序,提前无法得知用户传入的是多达长度的数据(比如说用户有可能会上传一个几十兆大小的文件),也有可能提交一个有几百kb的大段文字的表单,或者发起一个请求的时候带上10kb大的cookie和头部,还有可能下载一个几百兆大的文件,这种极端情况下,代理服务器中该如何定义IO缓冲区的大小?在开发这类程序碰到这种极端情况的处理需要注意什么?
如果你的程序运行在 Linux/FreeBSD/Windows7, 可以直接使用系统自带的端口转发功能。 特别是Windows7及以上, 可以直接使用 portproxy https://technet.microsoft.com...
举例来说,可以
netsh interface portproxy add v4tov4 listenport=%LOCAL_PORT% connectaddress=%REMOTE_IP% connectport=%REMOTE_PORT%
这就建好了一个IPv4到IPv4的端口转发。 缺省是TCP,还可以用UDP。
3 回答2k 阅读✓ 已解决
2 回答3.9k 阅读✓ 已解决
2 回答3.2k 阅读✓ 已解决
1 回答3.2k 阅读✓ 已解决
1 回答2.7k 阅读✓ 已解决
3 回答3.4k 阅读
1 回答1.6k 阅读✓ 已解决
看你的描述,你是要写一个http代理,对于你说的情况无非就三种处理方案:
1.透明代理,对请求和应答数据直接转发,对于这种情况只要控制每次网络io读写的最大字节数小于缓冲区的大小即可。
2.非透明代理(你要看一下请求的内容是什么)采用动态缓冲区,当缓冲区不够时重新动态分配,直到内存分配失败。
3.非透明代理(你要看一下请求的内容是什么)采用固定缓冲区,比如head的value最大长度可以设置为20KB,body最大长度设置为10MB。
在项目中通常使用第1种或者第3中处理方案,第3种方案也就是只放通合理的请求而已。