【问题标题】:Single socket multiple clients architecture单套接字多客户端架构
【发布时间】:2009-02-19 20:35:39
【问题描述】:

我必须维护到支付网关的单个持久套接字连接,并使用它来发送财务消息并接收相同的确认。然后我的应用程序将被各种客户端使用,因此我需要设计一种方法来同时处理它们并处理超时和重试等问题。

现在,我的主要问题是访问套接字...我应该只锁定每个消息请求和响应的发送和接收,还是设置一个排队系统并匹配它们?我还将在另一个线程上发送定期回显消息。

哦,我打算用 C# 来做。我希望能就这个问题提供一些一般性建议。

【问题讨论】:

    标签: c# multithreading architecture sockets


    【解决方案1】:

    您需要一个到支付网关的持久套接字,好的。我假设你的意思是它必须保持连接。

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

    我不确定我理解您所说的“锁定套接字”是什么意思。怎么锁?

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

    【讨论】:

    • 锁定套接字意味着使用某种同步技术(例如监视器)来确保一个客户端可以发送其请求并等待回复,而在此期间没有其他客户端发送或接收时间。不过我想我更喜欢排队。
    【解决方案2】:

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

    在我的服务器中,我保留了已连接客户端的列表和已连接目标的列表。当客户端请求一个目标时,我将它添加到一个矩阵中,该矩阵本质上是一个连接字典,因为多个客户端可以同时与一个目标对话。然后服务器完全异步地在客户端和目标之间泵送消息,我使用事务 ID 来跟踪消息。这样当目标响应请求时,服务器就知道将响应发送给哪个客户端。

    我不确定这是否是您想要的,但也许我所做的无论如何都会对您有所帮助。如果我在正确的轨道上,我可以进一步详细说明。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-01-05
      • 1970-01-01
      • 2021-11-09
      • 2012-05-14
      • 1970-01-01
      • 2015-02-08
      • 2011-03-22
      • 2012-02-19
      相关资源
      最近更新 更多