#c# #sql #sockets #queue
#c# #sql #сокеты #очередь
Вопрос:
В настоящее время я работаю над приложением, которое подключает наших пользователей к единственному экземпляру TCP-сокета, размещенному одним из наших поставщиков. То, что я надеюсь получить, — это веб-сервис, который затем будет транслироваться в сокет TCP.
Основная проблема заключается в том, что сокет позволяет отправлять данные только от одного из наших пользователей в определенное время. Итак, в настоящее время, если пользователь 2 отправит запрос, сеанс пользователя 1 выйдет из системы, и никакие дополнительные данные не будут отправлены. Это не было бы проблемой, и я мог бы просто сохранить запросы в таблице SQL, чтобы они шли по порядку, за исключением того, что мне нужна строка ответа, которую поставщик отправляет обратно, чтобы узнать статус транзакции.
Я попытался использовать класс Queue в C #, но, похоже, нет простого способа вернуть ответ из сокета TCP обратно исходному вызывающему. Просто ищу совет о наилучшем способе выполнения метода ожидания (который был бы очень коротким, поскольку сеанс сокета обычно длится менее секунды), чтобы нам не приходилось беспокоиться о том, чтобы когда-либо отключить сеанс другого пользователя.
Комментарии:
1. Итак, ваше приложение имеет два TCP-соединения на пользователя? Один к пользователю и один к исходному серверу? В основном прокси-сервер? Затем просто подождите и удерживайте соединение с пользователем, пока не настанет его очередь, получите данные с исходного сервера и затем отправьте их пользователю.
2. Правильно, единственное отличие заключается в том, что соединение моего приложения с пользователем будет REST API, а исходным сервером будет сокет TCP. Я пытаюсь выяснить, как сделать так, чтобы только одна попытка подключения к TCP-сокету одновременно выполнялась.
3. При проведении дополнительных исследований, похоже, что мьютекс или семафор будут работать для того, чего я пытаюсь достичь. У кого-нибудь есть представление о том, является ли это хорошей практикой?