Мульти-клиентский сервер в 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.

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
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

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