>>Да - UDP, если интерестно, посмотрите на генерируемый трафик (любым снифером)
>>Клиент периодически (скажем раз в 10-20 сек) шлёт пакет серверу,
>>этот пакет приходит на порт скажем 4040, на этот же порт (и
>>тот же сокет) приходят все пакеты от других клиентов..на приёме для
>>каждого принятого пакета на уровне приложения уже выясняется от кого конкретно
>>он пришёл и что делать дальше
>Да, наверное, это возможно. Правда, конечно, нужна авторизация и проверка сервером пакетов,
>чтобы клиент не мог притвориться другим клиентом, если коммуникация идет по
>UPD протоколу. Кстати, странно, что все пакеты валятся в один сокет.
>Это может быть только сокет типа raw. Для приема подключения от
>каждого клиента ведь все равно сокет надо создавать.
нет - для UDP это будет один сокет типа DGRAM который будет ассоциирован с одним конкретным портом (адресом) и на который все клиенты шлют пакеты..>
>
>>>>во вторых работают они в основном от пользователя-до-пользователя,
>>>Но ведь клиент все равно висит online у сервера, получая от него
>>>оповещения о выходе в сеть пользователей из списка контактов и так
>>>далее.
>>Есть в природе ещё и таймеры :) если от клиента в течении
>>минуты не пришло ни одного пакета - считаем что клиент в
>>отвале и по контакт-листу рассылаем извещение о смене состояния.. всё на
>>уровне приложения; держать TCP чтобы отслеживать состояние клиента - слишком накладно
>Ну, засыпать сервер пингами так часто, конечно, тоже не выход. Маленький DDOS
>получается :)
опять-же нет.. к примеру на 10k клиентов постоянно держать TCP это практически гарантированный DDOS, а принимать 1k маленьких udp пакетов в секунду - просто плотненькая нагрузка (каждый клиент шлёт пакет раз в 10 сек)
>>>> то есть по возможности не привлекая ресурсов центральных серверов
>>>Мы ведем разговор не о ресурсах, как вы заметили, наверное. А о
>>>портах. Я просто хочу понять, как ограничение на 65535 портов сказывается
>>>на работе серверов с большим количеством подключеней
>>>
>>>>и (как уже отмечали товарищи) - там стоят кластеры..
>>>Это в данном случае значения не имеет.
>>Как раз имеет :) если уж очень надо обрабатывать больше 64k транспортов,
>>то ставяться зеркальные сервера и какой-то умный шлюз для балансировки нагрузки
>>В реальности балансировку начинают делать задолго до исчерпания ресурсов портов, потому как >прочие ресурсы исчерпываются гоораздо раньше :)
>А причем тут теперь 64К транспортов? И что подразумевается под транспортом?
порт - это транспортный адрес..ip - сетевой..mac- физический :)
дескриптор - можно сказать логический в пространстве процесса
сокет - просто интерфейсное понятие в Berkeley стеке
надо бы Вам книжек почитать всяких :)
да попрактиковаться чутка