Сетевое программирование: поддержать сокеты или нет?

Спасибо, Данил, ваше предложение сработало, но только когда * ngIf оценивается как true, когда представление инициализируется.

Решение, которое я сейчас использую:

@ViewChild(MatSort) set content(sort: MatSort) {
    this.dataSource.sort = sort;
}

Это было основано на информации из: Angular 2 @ViewChild in * ngIf

Full рабочее решение по адресу: https://stackblitz.com/edit/angular-quzvjv-jzdbb6

7
задан APC 1 March 2010 в 03:45
поделиться

6 ответов

Существует компромисс между стоимостью хранения открытых соединений и стоимостью создания тех соединений.

Создание соединений стоит времени и пропускной способности. Необходимо сделать квитирование TCP с 3 путями, запустить новый поток сервера...

Хранение соединений открывает затраты главным образом память и соединения. Сетевые соединения являются ресурсом, ограниченным ОС. Если у Вас есть слишком много соединенных клиентов, у Вас могли бы закончиться доступные соединения. Это будет стоить памяти, поскольку у Вас будет один поток открытым для каждого соединения с его ассоциированной страной.

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

14
ответ дан 6 December 2019 в 08:17
поделиться

Если Вы только получили единственный сокет на клиенте и сервер, необходимо сохранить его открытым максимально долго.

3
ответ дан 6 December 2019 в 08:17
поделиться

Если Ваше приложение и сервер, с которым это говорит, являются близкими, сетевыми мудрыми, МОЖЕТ быть разумно закрыть соединение, но если они являются удаленными, сетевыми мудрыми, Вы - вероятно, более обеспеченное разрешение сокету, живому в течение какого-то времени.

Guillaume упомянул трехстороннее квитирование, и это в основном означает, что открытие сокета возьмет минимум 3 раза самого короткого пакетного времени транспортировки. Это может быть приближено "половиной распространения в прямом и обратном направлениях ping" и может легко достигнуть 60-100 мс для больших расстояний. Если Вы заканчиваете с дополнительным ожиданием на 300 мс для каждой команды, которая повлияет на пользовательский опыт?

Лично, я оставил бы сокет открытым, это легче и не стоит времени за каждый экземпляр "потребности отправить что-то", относительная стоимость является маленькой (один дескриптор файла, немного памяти для структур данных в пространстве пользователя и некоторого дополнительного устройства хранения данных в ядре).

3
ответ дан 6 December 2019 в 08:17
поделиться

Можно также посмотреть на DatagramSocket и DatagramPacket. Преимущество ниже находится вне понимания, недостаток является издержками, которые обеспечивает обычный Сокет.

0
ответ дан 6 December 2019 в 08:17
поделиться

Я предлагаю, чтобы Вы посмотрели на использование существующего решения для обмена сообщениями как ActiveMQ или Netty. Это обработает партию проблем, которые можно найти с обменом сообщениями.

0
ответ дан 6 December 2019 в 08:17
поделиться

Это зависит от того, как частый Вы ожидаете, что пользователь введет в командах. Если это происходит вполне нечасто, Вы могли бы, возможно, закрыть сокеты. Если частый, создавание сокетов неоднократно может быть дорогой операцией.

Теперь сказавший это, как дорогой, с точки зрения ресурсов машины, это должно иметь сокетное соединение, открытое для нечастых данных? Почему точно Вы думаете, что "поддержание Сокета и потока вывода для исходящего comms не является такой хорошей идеей" (даже при том, что это кажется правильным поступком)? С другой стороны, это отличается для потоков файла, если Вы ожидаете, что другие процессы могли бы хотеть использовать тот же файл. Закрытие потока файла быстро в этом случае было бы способом пойти.

Как, вероятно, это, что Вы собираетесь закончиться много соединений TCP, которые можно создать, который другие процессы, устанавливающие исходящие связи, могли бы хотеть использовать? Или Вы ожидаете иметь большое количество клиентов, соединяющихся с Вашим сервером за один раз?

2
ответ дан 6 December 2019 в 08:17
поделиться
Другие вопросы по тегам:

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