套接字性能C ++或C#

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

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

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

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

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

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

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

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

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

感谢大家!

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

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

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

  • I / O完成端口
  • 一般来说,线程池和multithreading
  • 网络协议(包括HTTP,FTP,TCP等) – 尤其适用于error handling
  • 证书和签名/加密(用于SSL / HTTPS)

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

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

C ++不是一门容易学习的语言。 再加上缺乏网络经验,你就处于一个全新的领域。 如果你想探索 – 很好,你将犯下所有错误并学到很多东西。 另一方面,如果你需要在某个日期之前交付一些东西 – 那么请选择你现在喜欢的任何东西。

如果你想编写一个非常快速,干净,下行的金属服务器,请使用C ++或plain C.

C ++不是一种简单的语言,容易被误用。 C ++要求学科实际阅读和思考困难的书籍。 使用得当,它是最好的系统编程语言。

如果性能不是问题,您可以使用更加柔软的工具,如C#。