c# - 套接字性能 C++ 或 C#

标签 c# c++ sockets proxy

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

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

Mentalis 使用 HTTP 1.0,我知道它效率不高,但代理应该那么慢吗?使用代理的可接受的性能损失量是多少? HTTP 1.1 会带来明显的不同吗?

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

抱歉,如果这些是显而易见的问题,但我以前没有做过网络编程。

编辑 回答 Joshua 的问题:我不一定需要自己编写核心代理服务器,只要有一个好的实现,但正如我所说,我一直在试验 Mentalis表现不佳。最终应用程序需要通过单个安装程序安装在 Windows PC/服务器上,无需手动配置。

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

更新 我采纳了 Aaronaught 的建议并着手改进 Mentalis 的代码。我解决了一个问题,因此它与 HTTP 1.1 一起工作,允许它与 Chrome 和 Firefox 一起工作(Windows 上的 Safari 4 由于某种原因使代理崩溃)。

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

谢谢大家!

最佳答案

与您选择的平台相比,您实际设计和编码应用程序的方式将产生无限大的差异。

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

对于此类应用程序,您可能必须了解的事项:

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

老实说,您在这里谈论的是一项不平凡的事业。我并不是要听起来过于消极,但是是什么让您认为您可以在不广泛了解底层网络协议(protocol)和代理设计的情况下做得更好?为什么不看看 Mentalis Proxy 源代码,看看是否可以改进它,而不是尝试从头开始编写自己的代码?前者肯定比后者容易。

无论如何,套接字就是套接字; .NET 套接字只不过是 Windows 套接字上的薄纸包装器,因此在 C++ 中性能不会有明显差异。

关于c# - 套接字性能 C++ 或 C#,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2773488/

相关文章:

c# - 从 javascript 调用 aspx.cs 方法

c++ - 包含 windows.h 会导致与局部变量名称发生冲突

c# - 最小化图像的内存消耗列表框(WPF)

javascript - MVC5 - 检查用于搜索日期字段的 2 个日期(文本框)之间的重叠

c++ - cin 缓冲区没有被忽略?

c++ - Arduino Serial 是在哪里创建的?

Java Sockets 多次连接尝试 - 无法向所有客户端发送数据

c++ - 使用Boost Asio时获取 “resolve: Host not found (authoritative)”异常

java - 如何在Java中将整数的字节字符串打印到套接字?

c# - 无法单击列表项内的标签