2010-10-28 5 views
54

Я разрабатываю новый сервер, который должен поддерживать тысячи подключений UDP (где-то около 100 000 сеансов). Любой ввод или предложения, по которым можно использовать?select vs poll vs epoll

+1

Какие вы на вас? разные os имеют разные специфические. –

+0

Linux Redhat enterprise version 5 – ravi

+1

@ravi: Вы также должны проверить на основе событий (асихронные) фреймворки, такие как Twisted, где вы можете написать свой сервер и протестировать его различными способами опроса: [TwistedMatrix.com: Выбор реактора] (http : //twistedmatrix.com/documents/current/core/howto/choosing-reactor.html) –

ответ

17

Linux: epoll FreeBSD: kqueue Windows: ??

Существуют библиотеки обертки, такие как libevent и libev, которые могут абстрагировать это для вас.

+4

+ 1 на libev, его удивительный! – dcolish

+13

Окна: порт ввода-вывода ввода-вывода – kibab

+6

И кстати. IOCP: Windows NT 3.5, 1994; kqueue: BSD 4.1, 2000; epoll: linux kernel 2.5.44, 2002. – Soonts

37

Ответ: epoll, если вы используете Linux, kqueue, если используете FreeBSD или Mac OS X, и порты завершения ввода/вывода, если вы находитесь в Windows.

Некоторые дополнительные вещи, которые вы (почти наверняка) хотят исследования являются: методы балансировки

  • нагрузки
  • многопоточных сетей
  • архитектура базы данных
  • Совершенные хэш-таблицы

Кроме того, это важно отметить в UDP нет «соединений», а не TCP. Было бы также в ваших интересах начать небольшие и масштабные масштабы, поскольку отладка сетевых решений может быть сложной задачей.

+5

Спасибо за ответ. Я понимаю, что нет такой вещи, которая называется UDP-соединениями, поскольку она ориентирована на соединение без привязки. Приложение, которое я имел в виду, основано на сеансе, поэтому вместо сеанса я упоминал его как соединение. Виноват. Кроме того, я попробовал более 200 000 сеансов на основе select с многопоточным приложением. Просто хотел оптимизировать. Кроме того, я не новичок в создании масштабируемой архитектуры. Балансировка нагрузки может быть не совсем подходящей для вида iam сервера. Это, безусловно, многопоточная сеть. Скорее всего, будет использовать какой-то образец производителя/потребителя. – ravi

40

Автор книги CURL написал удивительную статью на .

+5

Это руководство не помогло. В основном предполагалось, что все знают основные различия между этими тремя. – enigmaticPhysicist

+3

Пожалуйста, предоставьте хотя бы краткую сводку, а не просто голую ссылку. – MikeMB

+0

@enigmaticPhysicist - Я согласен с вами. Я нашел эту статью более подробно, надеюсь, что она поможет: https://www.ulduzsoft.com/2014/01/select-poll-epoll-practical-difference-for-system-architects/ –

Смежные вопросы