Я пытаюсь разработать простой IRC-бот. Сначала я хочу придумать правильный дизайн для этого проекта. Одна из вещей, которые меня интересуют сейчас - это механизм чтения. Я разрабатываю этого бота в системе Linux. (Fedora 12) Для чтения из сокета я использую системный вызов read (). Я планирую использовать функцию чтения следующим образом (код только пример. Не что-то из конечного продукта):
while (uBytesRead = read(iServerSocket, caBuffer, MAX_MESSAGE_SIZE))
{
//1. Parse the buffer and place it into a Message structure.
//2. Add the message structure to a linked list that will act as a queue of message that are to be processed.
}
Этот код будет выполняться в своем собственном потоке. Я выбрал этот вариант, потому что хотел, чтобы задержка между чтениями была как можно меньше. (записи будут реализованы таким же образом). Все это немного основано на предположениях, которые я хотел бы прояснить. Мой вопрос: что, если вы получаете столько данных с такой высокой скоростью, что чтение и обработка данных (в данном случае просто их анализ) идет медленнее, чем скорость поступления данных. Я сделал предположение, что эти данные будет буферизован системой. это правильное предположение? И если так:
- Насколько велик этот буфер?
- Что происходит с поступающими данными, когда этот буфер заполняется?
- Чтобы мое приложение было защищено от спама, как мне лучше всего с ним бороться?
Надеюсь, я достаточно ясно объяснил свою проблему.
Заранее спасибо.