套接字性能C++或C#

mod*_*bie 2 c# c++ sockets proxy

我必须编写一个本质上是代理服务器的应用程序来处理来自我们服务器的所有HTTP和HTTPS请求(Web浏览等).我对C++知之甚少,并且很乐意在C#中编写应用程序功能.

我已经尝试使用Mentalis的代理(C#套接字代理),它似乎适用于小型网页,但是如果我去像tigerdirect.ca这样的大型网站并浏览几层,那么它很慢,有时请求无法完成我看到破碎的图像和javascript错误.所有供应商站点和其他内容繁重的站点都会发生这种情况.

Mentalis使用HTTP 1.0,我知道它不是那么有效但是代理应该那么慢吗?使用代理可以承受的性能损失是多少?HTTP 1.1会有明显的区别吗?

C++代理会比C#中的代理快得多吗?Mentalis代码效率不高吗?我是否能够使用预制的C++代理并将DLL导入C#并仍然获得良好的性能,或者该项目是否会调用所有C++?

很抱歉,如果这些是明显的问题,但我之前没有做过网络编程.

编辑回应约书亚的问题:我不一定需要自己编写核心代理服务器,只要有一个很好的实现,但就像我说我一直在试验那些表现不佳的Mentalis.最终的应用程序需要从单个安装程序安装在Windows PC/Server上,手动配置为0.

我可以在安装程序中编写所有必要的注册表编辑,就像我之前在C#中所做的那样.

更新我接受了Aaronaught的建议,并研究改进Mentalis的代码.我修复了一个问题,因此它适用于HTTP 1.1,允许它与Chrome和Firefox一起使用(Windows上的Safari 4因某些原因导致代理崩溃).

当我在FireFox和Chrome中测试时,我发现性能问题并不存在,这意味着IE问题不是代理问题.重置浏览历史记录设置后问题就消失了.

感谢大家!

Aar*_*ght 12

您实际设计和编写应用程序的方式将比您选择的平台产生更大的差异.

如果您有效地设计服务器,它将是高效的.如果你设计效率低下,效率会很低.选择C++而不是C#没有明显的优势,反之亦然...除非你必须从头开始学习整个语言,这是一个巨大的负面因素(当你几乎不知道这些工具时很难想出一个好的设计).

对于此类应用,您可能需要了解的事项:

  • I/O完成端口
  • 一般来说,线程池和多线程
  • 网络协议(包括HTTP,FTP,TCP等) - 尤其适用于错误处理
  • 证书和签名/加密(用于SSL/HTTPS)
  • ...

老实说,你在谈论一个非平凡的事业.我并不是说听起来过于消极,但是如果没有对底层网络协议和代理设计的广泛了解,是什么让你认为你可以做得更好?为什么不看看Mentalis Proxy源代码,看看你是否可以改进它,而不是试图从头开始编写自己的代码?当然前者比后者容易.

无论如何,套接字是一个套接字; .NET套接字不仅仅是Windows套接字上的纸质包装器,因此在C++中性能不会明显不同.