Асинхронный подход к использованию потоков с сокетами - PullRequest
2 голосов
/ 09 июля 2010

Я всегда создавал свои собственные сериализаторы / десериализаторы, чтобы иметь возможность использовать BeginReceive / EndReceive с сокетами, чтобы избежать использования одного потока на подключенный сокет. Это довольно трудоемкая задача.

Я начал изучать protobuf-net и хочу использовать его с асинхронными сокетами без необходимости писать сериализацию / десериализацию самостоятельно. Я бы предпочел, чтобы мне не приходилось использовать один поток на сокет, чтобы обернуть блокирующие операции.

Глядя на быстрый запуск , они делают именно это (один поток на клиента). Нет другого пути?

Мой вопрос на самом деле не о protobuf-net, а о сериализации и сокетах в целом. Но примеры для protobuf-net приветствуются.

1 Ответ

1 голос
/ 09 июля 2010

Это просто базовый пример.Protobuf-net - это уровень сериализации , а не уровень обмена сообщениями.Если у вас есть определенный способ обработки сообщений: сделайте это.Все, что вам нужно сделать, во время вашей потоковой обработки, буферизировать все сообщение (возможно, в MemoryStream), а затем обрабатывать его через protobuf-net, когда данные доступны.

Разница будет в том, чтовместо непосредственного использования методов *WithLengthPrefix может потребоваться отдельно обрабатывать длину полезной нагрузки, чтобы ваш код знал, сколько данных нужно буферизовать перед обработкой.

...