Мульти-клиентский сервер в dart

Если я хочу создать простой многопользовательский TCP-сервер на Java, я бы просто дождался соединений и создал другой поток, который использует пул потоков для обработки каждого из них.

Мне интересно, позволит ли этот фрагмент кода такое же поведение без явного открытия потока для каждого клиента в Dart:

ServerSocket.bind('127.0.0.1', 4041)
  .then((serverSocket) {
    serverSocket.listen((socket) {
      socket.transform(utf8.decoder).listen(handleClient);
    });
  });

void handleClient(Socket socket){
  // do something
}

Если нет, как мне реализовать такое поведение? Предпочтительно способом Darty.

0
0
611
2

Ответы 2

По умолчанию Dart использует однопоточный параллелизм. Если вы хотите, чтобы код выполнялся в другом потоке, вам нужно явно создать новый Isolate.

Dart поддерживает более одного потока, прослушивающего один и тот же IP-адрес и порт, и автоматически распределяет входящие соединения по прослушивающим потокам.

Смотрите также

Значит, мне нужно открыть изолятор для каждого клиента? Вы предлагаете сделать это в функции handleClient или в Слушать?

Ran Elgiser 10.09.2018 10:36

В этом нет необходимости, только если вы хотите, чтобы каждый запрос обрабатывался в другом изоляте. Создание изоляторов для каждого запроса - плохая идея, поскольку изолирующий запуск выполняется медленно. Один поток может нормально обрабатывать множество запросов. Вы можете заранее запустить несколько изоляторов и позволить Dart обмениваться запросами между ними, чтобы распределять нагрузку между несколькими изоляторами.

Günter Zöchbauer 10.09.2018 10:42

Веб-фреймворки Aqueduct и Angel поддерживают предварительно созданные Isolates, чтобы гарантировать, что все ваши ядра могут быть задействованы.

Разве они оба не предназначены для веб-приложений? Я планирую использовать это для небольшого проекта мобильного приложения, над которым я работаю.

Ran Elgiser 11.09.2018 09:51

Компоненты на стороне сервера предоставляют API RESTful и доступ к базе данных на стороне сервера. Да, люди используют их с приложениями Flutter.

Randal Schwartz 11.09.2018 17:27
package:angel_framework - это библиотека главного сервера, которая может использоваться сама по себе (в этом отношении и во Flutter). Более «прикладная» функциональность, такая как WebSockets, статические серверы, базы данных и т. д., Находится в отдельных дополнительных пакетах.
Tobe O 23.07.2019 01:51

Другие вопросы по теме