Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/131.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 使用webspheremq的客户机服务器_C++_Multithreading_Client Server_Message Queue_Ibm Mq - Fatal编程技术网

C++ 使用webspheremq的客户机服务器

C++ 使用webspheremq的客户机服务器,c++,multithreading,client-server,message-queue,ibm-mq,C++,Multithreading,Client Server,Message Queue,Ibm Mq,我在客户机-服务器应用程序的两个选项中进行选择- 首先,采用TCP/IP(纯基于套接字)方法,使用多线程服务器,自己管理发送和接收的同步 二次使用和WebSphereMQ方法(MQI)。服务器基本上有一个输入队列和一个输出队列。客户端写入服务器输入队列,服务器将应答放入带有相关标识符等的输出队列,因此只需要2个队列。服务器程序是多线程的(线程池),多个线程将读取输入队列并写入输出队列 问题-我倾向于第二种方法,但几乎没有疑问- MQI调用是线程安全的吗?我是否必须对队列的MQGET和MQPUT使

我在客户机-服务器应用程序的两个选项中进行选择-

首先,采用TCP/IP(纯基于套接字)方法,使用多线程服务器,自己管理发送和接收的同步

二次使用和WebSphereMQ方法(MQI)。服务器基本上有一个输入队列和一个输出队列。客户端写入服务器输入队列,服务器将应答放入带有相关标识符等的输出队列,因此只需要2个队列。服务器程序是多线程的(线程池),多个线程将读取输入队列并写入输出队列

问题-我倾向于第二种方法,但几乎没有疑问-

  • MQI调用是线程安全的吗?我是否必须对队列的
    MQGET
    MQPUT
    使用互斥

  • 基于MQ的方法的性能会低于基于套接字的方法吗。我指的是两件事

    a。IBM MQ队列操作通常比直接套接字连接慢吗

    b。
    MQGET
    MQPUT
    上的互斥锁是否会降低消息处理速度

    c。我计划每秒加载大约10000条消息(每个大约100字节)。回复大约为5 KB(XML消息)。这是基于IBM MQ的方法的实际负载吗


  • <> >注意:语言是C++,服务器的操作系统是Solaris。< /P> < P>你描述的用例非常狭窄。不仅仅是“套接字或队列”的情况,还必须考虑其他因素:

  • 如何监控和管理这件事?是否有必要编写所有向NOC报告系统运行状况并提供消息统计信息的部分,或者我可以使用MQ提供的功能
  • 我需要排队还是这真的是一个同步应用程序
  • 这真的是点对点,还是相关应用参与了服务生态系统和上下游连接?它还需要与什么集成
  • 是否需要消息充实、路由、扇入、扇出、发布/订阅或其他功能?编写代码或使用WMQ/WMQ代理本机功能
  • 连接是否需要身份验证?加密?编写代码或使用WMQ本机功能
  • 是否涉及法规遵从性因素?如果涉及,审核自定义代码与COTS传输的成本是多少
  • <> LI>是否有深厚的C++技巧,并准备在代码的生命周期中维持其长凳深度?
  • 如何管理连接配置?它是否无缝支持HA和DR?编写代码或使用WMQ本机功能
  • 如何管理异常逻辑和自动重新连接?编写代码或使用WMQ本机功能
  • 商业案例要考虑的不仅仅是原始的速度。当两个备选方案都能够满足吞吐量要求时,这一点尤其正确,这里应该是这样。一旦功能需求得到满足,就必须在业务案例中考虑所有其他方面(还有更多我没有想到的方面)

    至于具体问题

    对队列的访问按您希望的方式进行管理。多个线程竞争相同的消息,但传递给一个线程的消息不会传递给另一个线程。例外情况是,如果消息被回滚并再次可用,或者应用程序正在使用pub/sub并有意接收消息的多个副本

    在应用程序端,调用在会话中是线程安全的。因此,所有使用相同会话的线程一起提交。通常,一对使用请求/应答的线程协同工作。否则,每个线程一个会话就可以满足您的需要

    至于性能,这是一个苹果对桔子的比较。问题在于,提供一个异步消息传输的所有服务、诊断、弹性和其他特征的C++套接字程序是否与传输一致。答案通常是否定的。WMQ经过20年的优化,只做了一件事,而且做得非常好。一个新的自定义C++套接字程序将更快地移动数据,但不能提供相同的功能。因此,归根结底,应用程序对WMQ功能的需求是否太少,从长远来看,定制它所需的几个功能,然后在应用程序的生命周期中保持这些功能,会更便宜。同样,答案通常是否定的

    有关消息吞吐量的详细信息,请转到页面,查找名称以MP_uu开头的消息,以了解您所需的平台和版本。即使在普通硬件上,也可以实现10k MPS的小消息传输