Форум сайта python.su
Задача такая: есть около 400 клиентов которые раз в пару минут оправляют небольшую порцию данных на сервер. Сервер должен 100% принимать сообщения от всех клиентов и писать их в базу данных. Нашел несколько примеров сделанных с помощью threading, там каждое новое подключение передается в новый поток, а после получения от клиента сообщения об окончании передачи сокет и поток закрываются. Я так понимаю что это мне не подходит т.к. сервер принимает данные от клиента пока сервер работает, т.е. сокет и поток тоже существуют постоянно. Читал еще про асинхронный прием сообщений, но немного не понял. Напишите пожалуйста логику работы подобного сервера и что использовать для его работы (потоки, процессы, асинхронное чтение или может еще что-то есть), можно просто общее описание без примеров кода.
Офлайн
megaman
Почему вы не хотите использовать в работе готовые решения? Любой веб-сервер решит вашу задачу на 200%
Офлайн
megamanНадо чтобы не работал но принимал сообщения? :).
мне не подходит т.к. сервер принимает данные от клиента пока сервер работает
FishHookНу веб сервер не решит если он не запущен.
Любой веб-сервер решит вашу задачу на 200%
Отредактировано doza_and (Ноя. 28, 2017 21:59:56)
Офлайн
doza_andОн наверное имел ввиду, что-то вроде легковесного демона: который спит в режиме стэнд бай, и как только данные прилетят на сетевую карту(буффер) начинал бы запускать сокеты,шмокеты и попутно инсертить все в бд,а потом опять спать.
megaman
мне не подходит т.к. сервер принимает данные от клиента пока сервер работает
Надо чтобы не работал но принимал сообщения?.
megamanВы художник вам и карты в руки
Напишите пожалуйста логику работы подобного сервера и что использовать для его работы
Отредактировано papuas (Ноя. 29, 2017 00:27:30)
Офлайн
Непонятно задал вопрос постараюсь объяснить что я хочу узнать. Например за 1 секунду на порт приходит 100 пакетов от разных клиентов, я так понимаю они будут храниться в каком-то буфере пока обрабатываются пакеты пришедшие раньше, а если буфер переполнится пакеты потеряются. Мне нужно принимать и обрабатывать все данные от клиентов, даже при очень большом количестве клиентов.
Офлайн
Если я правильно понимаю то в моем случае мне поможет модуль asyncio
Офлайн
для гарантированной доставки используют MQ (message queue)
https://habrahabr.ru/post/149694/
быстрой считается ZeroMQ
http://www.opennet.ru/opennews/art.shtml?num=27137
https://github.com/aio-libs/aiozmq
но зачем вам тут питон?
https://habrahabr.ru/post/198578/
Отредактировано vic57 (Ноя. 29, 2017 09:22:36)
Офлайн
Я думаю что тебе нужен Twisted
Офлайн