Socket server для множества клиентов с постоянным подключением. Как?

Делаю сокет-сервер, к которому должны быть подключены сотни клиентов с постоянным соединением. Клиент - устройство с датчиками. которое периодически посылает статусы. Т.е. объем информации небольшой. Вначале соединения, идет обмен приветствиями, чтобы убедиться что постучался не дядя Вася. Затем периодически отправляются статусы.
Про сокеты я обчитался почти достаточно. Штука довольно примитивная. Очень помогли в понимании эта и эта статьи. Но некоторые вопросы все же остались.

1. Возможно ли постоянное подключение?
В статье по второй ссылке сказано вот это:
But if you plan to reuse your socket for further transfers, you need to realize that there is no EOT on a socket. I repeat: if a socket send or recv returns after handling 0 bytes, the connection has been broken. If the connection has not been broken, you may wait on a recv forever, because the socket will not tell you that there’s nothing more to read (for now).

Я правильно понимаю что для того чтобы соединения было постоянным, нужно непрерывно обмениваться пакетами?

2. Сервер должен быть асинхронным. Что для этого лучше использовать без лишнего усложнения?
- потоки
- asyncio
- socketserver
- twisted
- tornado
  • Вопрос задан
  • 1112 просмотров
Пригласить эксперта
Ответы на вопрос 3
@nesterwsx
1. Возможно, см. TCP keepalive. Нужно корректно обрабатывать сокет отвалившегося клиента.
2. nginx.org/ru/#architecture_and_scalability + www.kegel.com/c10k.html
Про сокеты лучше почитать ещё и Стивенса.
Ответ написан
Вы уверены в том, что вам нужны сокеты?

Если я правильно понимаю, клиенты только отправляют своё состояние на сервер. В этом случае, если периодичность невелика (более 10 секунд), возможно, было бы лучше не держать постоянное соединение, а сделать всё посредством запросов.
Ответ написан
@marataziat
Джангист-тракторист
Pubnub был создан для тебя!
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы