Здравствуйте, Pzz, Вы писали:
Pzz>Здравствуйте, stronciy77, Вы писали:
Pzz>>>Это вопрос о постановке задачи: что делать, если данные поступают быстрее, чем клиенты успевают их потреблять?
S>>Пробрасывать все данные которые не успел получить пользователь, то есть не получил лови следующий пакет ! ( К сожалению это единственных выход.)
Pzz>Совершенно не обязательно это единственный выход.
Pzz>Скорость поступления данных от чего зависит? Если данные летят с неограниченной скоростью (т.е., скорость определяется только скоростью рассылки), то при предложенном вами подходе только один, самый быстрый, клиент будет получать все данные. Остальным останется только зубами щелкать
Скорость поступления данных довольно большая. В среднем 4 раза в секунду, приходят пакеты от 1кб до 4кб, очень редко более длинные, скажем по 8кб
Это строки ограниченные знаком '$' сейчас работает ретранслятор, который перенаправляет всем клиентам с такой же скоростью данные, но из-за медленных накапливается пул в памяти (от меня не зависящий) который сам медленно раздает всем, и если медленных ребят много, скажем 50 из 100 , то все начинают получать данные очень медленно. Как програмно определять кто быстрый кто медленный я не знаю. И даже не догадываюсь.
Pzz>Если же у источника данный есть своё собственное ограничение скорости, то возможны варианты. К примеру, клиенты, которые успевают в среднем, но не успевают в пиках, могли бы получать все данные без потерь, если обеспечить для них буферизацию. И только при переполнении такого буфера пришлось бы данные выбрасывать.
Ок, буфер, это общая куча, или для каждого свой ? Если общая куча, то тогда будет обратный трафик, с номером, последнего принятого пакета, и нагрузка на выгребание всех данных пришедших за это время... Если у каждого свой, то как это сделать, в потоках ?
S>>Не создавать же для каждого пользователя пул сообщений и раздавать с него ? Тогда подтврждение получения будет потреблять еще больше ресурсов !
Pzz>У вас не высоконагруженный сервер, и проблемы с нагрузкой существуют только от плохой реализации. Нормальная реализация делала бы все вышеперечисленное, создавая загрузку на процессор, которую в микроскоп не разглядишь.
Так какая реализация будет самая лучшая для такой задачи ?
Pzz>И что им делать, бедолагам, если данные с пропусками? Они хоть должны знать-то, что не все получили?
А вот это проблема, потому что в принципе данные критичны ... Но как их доставлять медленным ребятам, я до сих пор не знаю !