Модель сервера для приложения для чата пишется на java - PullRequest
0 голосов
/ 06 августа 2020

Я создаю приложение чата , используя java. Я хочу знать, какая модель подходит для обработки одновременных пользователей на стороне сервера. У меня в голове два подхода:

  1. Каждый раз, когда клиент подключается к серверу через TCP-сокет, создается новый поток, и этот поток будет обрабатывать все операции чтения из этого сокета. . Но если слишком много пользователей одновременно подключаются к сети, то на сервере будет слишком много потоков, что увеличит нагрузку на сервер. Однако операция Socket.read() является операцией блокировки, и если нет ввода для чтения из сокета, то планировщик потока будет бездействовать этот поток, пока ввод не станет доступным. Следовательно, нагрузка не будет слишком большой, даже если слишком много пользователей подключатся одновременно.

  2. Второй подход использует пулы потоков. Будет создан пул потоков фиксированного размера. Каждый раз, когда подключается новый клиент, сокет, соответствующий этому клиенту, будет передан одному из потоков в пуле потоков. Один поток в пуле потоков может обрабатывать более 10 пользователей одновременно. Он будет перебирать все сокеты и, если обнаружит, что есть ввод для чтения из этого сокета (с использованием метода InputStream.available()), он прочитает ввод, иначе он проверит следующий сокет. Но этот подход тратит много циклов ЦП, не делая ничего полезного, если нет ввода для чтения.

Есть ли лучший подход, который я могу использовать? Я погуглил, но ничего полезного не нашел.

...