Создание сервера бинарных сокетов .NET: пользовательский или SignalR против XSockets против WebSocket4Net? - PullRequest
0 голосов
/ 02 апреля 2012

Мне нужно собрать библиотеку сервер + клиент для запроса данных из моей базы данных TimeSeriesDb , и для .NET доступно много различных библиотек сокетов и веб-сокетов, плюс я мог бы реализовать свою собственную реализацию. Следовательно - может действительно использовать совет о том, как действовать.

Я нашел SuperSocket и WebSocket4net на его основе, XSockets и SignalR . Существует также реализация Microsoft WebSocket , которая поставляется с .NET 4.5, которая может сделать других устаревшими.

Тем не менее, WebSockets оптимизированы для веб-обновлений и обновлений в реальном времени, а не для ответов на двоичные запросы, которые мне нужны, поскольку клиент также является .NET lib, которого нет в браузере.

подробности:

И запрос, и ответ в БД в двоичном виде:

Клиент: Получить данные для заданных параметров (блок двоичных данных)
Сервер: Начинает отправку потока данных (в виде двоичных блоков), где клиент может остановить передачу в любой момент.

Я нацеливаюсь на .NET 4, поэтому задачи TPL могут получить преимущества от асинхронных возможностей.

Приятно иметь: потоковое мультиплексирование, когда более одного запроса / ответа могут проходить через одно соединение (по одному блоку для каждого ответа по очереди). Я не уверен, если это необходимо, или если несколько соединений будут работать лучше.

1 Ответ

2 голосов
/ 05 апреля 2012

WebSockets имеет двоичный тип данных с использованием кода операции% x2 на основе официального документа RFC6455 .

Также WebSockets реализует кадрирование для каждого отправляемого сообщения данных.Для небольших пакетов это будет разумная нагрузка на трафик.

Если нет планов дальнейшей поддержки подключения к вашей базе данных из внешнего интерфейса.Тогда я не понимаю, почему вы используете WebSockets.Это сложнее, чем просто бинарное взаимодействие, и вам придется реализовать или использовать готовое решение для WebSockets.Я считаю, что для памяти и обработки пакетов гораздо эффективнее использовать чистые сокеты TCP с двоичной сериализацией.Я бы порекомендовал взглянуть на Буфер протокола Google и проверить .Net реализация .

Это позволит вам упаковать данные вашего сообщения в хорошем виде, идобавит возможность связи с другими приложениями в будущем, которые также реализуют этот протокол.Также, если вы встраиваете протокол данных в базу данных, было бы намного лучше создать рукопожатие с выбором протоколов данных, и тогда сервер будет использовать одну из доступных реализаций, по которой клиент предпочитает общаться.

Возможно, выбыть также заинтересованным в использовании встроенной функции сериализации в .Net.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...