Управление потоками в программировании сокетов C # - PullRequest
0 голосов
/ 06 марта 2012

У меня есть приложение для сокетов TCP, которое на стороне клиента отправляет огромные строковые сообщения на сервер одновременно. И сервер получает эти сообщения, записывая их в Access DB. Так что, если есть так много клиентов, серверная сторона не может правильно обрабатывать каждого клиента икогда-нибудь сервер сам закрывается.Я хочу спросить, есть ли способ сообщить клиенту поток перед отправкой сообщения, ожидающего очереди, если в очереди находится другой клиент. С этим сервером не нужно обрабатывать, например, запрос клиента 30 одновременно.

Дляпример;

  1. Клиент отправляет сообщение => Сервер обрабатывает 1 запрос клиента
  2. Клиент ожидает выполнения 1 запроса клиента, чем 2 Клиент отправляет сообщение => Сервер обрабатывает 1 запрос клиента
  3. Клиент ожидает выполнения 2 требований клиента ......

Моя проблема возникает при использовании доступа к базе данных.При открытии подключения для доступа сохранение данных в таблицы и закрытие базы данных занимает время, а сервер теряет работоспособность :) Если я не использую базу данных доступа, я могу без проблем получать огромные сообщения.

Ответы [ 2 ]

3 голосов
/ 06 марта 2012

Да, вы можете сделать это, однако это не самый эффективный способ сделать это. Ваша схема однопоточная.

Что вы хотите сделать, это создать пул потоков и принимать сообщения от нескольких клиентов и обрабатывать их как отдельные потоки. Если это слишком сложно. У вас может быть очередь потребителя-производителя на вашем сервере, все входящие сообщения будут храниться в очереди, пока ваш сервер будет обрабатывать их в порядке поступления.

0 голосов
/ 06 марта 2012

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

Перейдя к HTTP, вы более или менее решите все проблемы с производительностью.Веб-сервер уже знает, как обрабатывать несколько длинных запросов, поэтому вам не нужно об этом беспокоиться.Поскольку вы отправляете большие строки, накладные расходы HTTP не повлияют на вашу производительность.

...