单个套接字多客户端架构

3
我需要维护一个持久的套接字连接到支付网关,并使用它发送财务信息并接收确认。我的应用程序将被多个客户使用,因此我需要设计一种处理并发和处理超时和重试等问题的方式。
目前,我的主要问题是访问套接字...我应该仅锁定每个消息请求和响应的发送和接收,还是设置一个排队系统并匹配它们?我还将在另一个线程上发送定期回声消息。
哦,我计划在C#中完成这个项目。关于这个问题,我希望能得到一些一般性的建议。
2个回答

1

你需要一个持久的套接字来连接支付网关,好的。我理解你的意思是它必须保持连接。

然后你需要创建一个监听套接字来监听来自客户端的连接。然后在两者之间充当翻译。

我不确定你所说的“锁定套接字”的意思。如何锁定?

除非支付网关的协议旨在进行多个并发操作,否则您可能不希望一次发送多个请求。这意味着某种类型的互斥或信号量控制每个请求的线程队列,队列在大多数情况下更有效率。


锁定套接字意味着使用某种同步技术(例如监视器)来确保一个客户端可以发送其请求并等待回复,而在此期间其他客户端不会发送或接收。我认为我更喜欢队列。 - jpfollenius

1

我做过类似的事情(如果我理解你的意思正确的话)。我有一个服务器通过套接字连接到一些目标设备,然后客户端连接到服务器以与不同的目标系统通信。这是你想要的吗?我有多个客户端通过服务器连接到同一个套接字。

在我的服务器中,我保持一个已连接客户端列表和一个已连接目标列表。当客户端请求目标时,我将其添加到矩阵中,该矩阵实质上是连接的字典,因为几个客户端可以同时与一个目标进行通信。然后,服务器完全异步地在客户端和目标之间传递消息,并使用事务ID来跟踪消息。因此,当目标回答请求时,服务器知道向哪个客户端发送答案。

我不确定这是否符合您的要求,但也许我所做的可以在您的工作中帮助您一些。如果我走在正确的轨道上,我可以进一步阐述。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接