Архитектура нескольких клиентов с одним сокетом - PullRequest
3 голосов
/ 19 февраля 2009

Я должен поддерживать соединение с одним постоянным сокетом к платежному шлюзу и использовать его для отправки финансовых сообщений и получения подтверждения для этого. Мое приложение будет затем использоваться различными клиентами, поэтому мне нужно найти способ обрабатывать их одновременно и решать такие проблемы, как тайм-ауты и повторные попытки и т. Д.

Прямо сейчас моя главная проблема связана с доступом к сокету ... я должен просто заблокировать отправку и получение запроса и ответа на сообщение или настроить систему очередей и сопоставить их? Я также буду периодически отправлять эхо-сообщения в другой поток.

О, и я планирую сделать это на C #. Буду признателен за общие советы по этому вопросу.

Ответы [ 2 ]

1 голос
/ 19 февраля 2009

Я сделал именно это (если я вас правильно понимаю). У меня есть сервер, который подключается к некоторым целевым устройствам через сокеты, а затем клиенты подключаются к серверу для связи с различными целевыми системами. Это (вроде) то, что вы хотите? У меня есть несколько клиентов, которые общаются с одним и тем же сокетом через сервер.

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

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

1 голос
/ 19 февраля 2009

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

Затем вам нужно создать сокет прослушивателя для прослушивания соединений от ваших клиентов. Тогда действуй как переводчик между ними.

Я не уверен, что понимаю, что вы имеете в виду под "блокировкой розетки". Блокировка это как?

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

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