Сокет Производительность C ++ или C # - PullRequest
2 голосов
/ 05 мая 2010

Мне нужно написать приложение, которое по сути является прокси-сервером для обработки всех запросов HTTP и HTTPS с нашего сервера (просмотр веб-страниц и т. Д.).Я очень мало знаю C ++, и мне очень удобно писать функции приложения на C #.

Я экспериментировал с прокси из Mentalis (прокси-сокет C #), который, кажется, отлично работает для небольших веб-страниц, ноесли я захожу на большие сайты, такие как tigerdirect.ca, и просматриваю пару слоев, то это очень медленно, иногда запросы не завершаются, и я вижу неработающие изображения и ошибки JavaScript.Это происходит со всеми сайтами наших поставщиков и другими сайтами с большим содержанием.

Mentalis использует HTTP 1.0, который, как я знаю, не так эффективен, но прокси должен быть таким медленным?Какова приемлемая величина потери производительности при использовании прокси?Будет ли HTTP 1.1 иметь заметную разницу?

Будет ли прокси C ++ намного быстрее, чем прокси в C #?Код Mentalis просто не эффективен?Смогу ли я использовать предварительно созданный прокси-сервер C ++ и импортировать DLL в C # и при этом получить хорошую производительность, или этот проект потребует всего C ++?

Извините, если это очевидные вопросы, но я раньше не занимался сетевым программированием.

РЕДАКТИРОВАТЬ В ответ на вопрос Джошуа: мне не обязательно писать основной прокси-сервер сам, если есть хорошая реализация, но, как я уже сказал, я былэкспериментируя с Mentalis, который не так хорош.Окончательное приложение должно быть установлено на ПК с Windows / Server с одного установщика с ручной настройкой 0.

Я могу написать все необходимые изменения реестра в установщике, как я делал это раньше в C #.

ОБНОВЛЕНИЕ Я воспользовался советом Ааронаута и занялся улучшением кода Mentalis.Я исправил проблему, так что он работает с HTTP 1.1, что позволяет ему работать с Chrome и Firefox (Safari 4 в Windows сбивает прокси-сервер, хотя по некоторым причинам).

Когда я тестировал в FireFox и Chrome, я обнаружил, что проблем с производительностью не было, что означало, что это проблема IE, а не прокси.После сброса настроек истории просмотра проблема ушла.

Спасибо всем!

Ответы [ 3 ]

12 голосов
/ 05 мая 2010

То, как вы на самом деле разрабатываете и кодируете приложение, будет иметь гораздо большее значение, чем выбранная вами платформа.

Если вы спроектируете сервер эффективно, он будет эффективен. Если вы разрабатываете это неэффективно, это будет неэффективно. Нет очевидного преимущества в выборе C ++ по сравнению с C # или наоборот ... если только вам не придется изучать весь язык с нуля, что является огромным недостатком (трудно придумать хороший дизайн, когда вы едва знакомы с инструментами).

Вещи, которые вы, вероятно, должны понимать для этого типа приложения:

  • Порты завершения ввода / вывода
  • Пулы потоков и многопоточность в целом
  • Сетевые протоколы (включая HTTP, FTP, TCP и т. Д.) - особенно для обработки ошибок
  • Сертификаты и подпись / шифрование (для SSL / HTTPS)
  • ...

Честно говоря, вы здесь говорите о нетривиальном начинании. Я не хочу звучать слишком негативно, но что заставляет вас думать, что вы можете лучше работать без глубоких знаний сетевых протоколов и дизайна прокси? Почему бы вместо этого не взглянуть на исходный код Mentalis Proxy и посмотреть, сможете ли вы его улучшить, вместо того, чтобы пытаться писать свой собственный с нуля? Конечно, первое будет легче, чем второе.

В любом случае, сокет - это сокет; Сокеты .NET не намного больше, чем тонкие бумажные обертки над сокетами Windows, поэтому производительность в C ++ не будет заметно отличаться.

1 голос
/ 05 мая 2010

C ++ - нелегкий язык для изучения. Объедините это с отсутствием опыта общения, и вы окажетесь на совершенно новой территории. Если вы хотите исследовать - хорошо, вы сделаете все ошибки и многому научитесь. Если, с другой стороны, вам нужно что-то доставить к какой-то дате - используйте то, что вам сейчас удобно.

0 голосов
/ 27 мая 2010

Если вы хотите написать действительно быстрый, чистый, современный сервер, используйте C ++ или простой C.

C ++ не простой язык, и его легко использовать неправильно. C ++ требует, чтобы дисциплина действительно читала и размышляла над трудными книгами. При правильном использовании это лучший язык системного программирования.

Если производительность не является проблемой, вы можете использовать более мягкие инструменты, такие как C #.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...