血与荣誉软件科技论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
热搜: 活动 交友 discuz
查看: 458|回复: 1

[发布] 血与荣誉消息队列服务器发布说明

[复制链接]

27

主题

37

帖子

243

积分

管理员

CEO

Rank: 9Rank: 9Rank: 9

积分
243

突出贡献荣誉管理论坛元老

QQ
发表于 2017-4-28 12:47:57 | 显示全部楼层 |阅读模式
      血与荣誉消息队列服务器是基于血与荣誉网络通信引擎3.1.2版本开发的高可靠消息队列服务。这个消息队列服务不同于其他消息队列服务,他不是一个高性能转发服务器,而是一个稳定安全的消息保存服务器,与ZeroMQ和RabbitMQ有本质区别,他们更偏向与大数据转发,而我们更偏向消息这个概念。 我们的消息队列服务支持以下特性:
             1.消息永久保存或者获取一次就删除
             2.支持消息带KEY(密码),通过验证才能获取
             3.不关心TCP或者UDP,可以跨协议通信
             4.支持设定消息保存时间(秒)
             5.支持消息包序列号访问和写入      
             6.安全可靠,投递成功,消息不会丢失,支持加密消息传输                          7.多线程同步处理消息队列,高性能消息IO
             我们这个消息队列服务支持测试,你可以通过下面的测试代码自己写测试程序来访问我们的消息队列服务。你也可以联系我们索要消息队列服务器版本,如果你想购买我们的消息队列服务器版本,现在只需要100一年的更新权,500永久更新并且提供服务器代码(不包括模块代码)。
       测试代码如下:你可以根据协议自己编写一个消息队列客户端。服务器测试IP地址填写:106.14.9.157 TCP端口:5655 UDP端口:5656,关于消息定义,你可以下载最新版本SDK查看公用协议头。

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. #include <signal.h>
  5. #include <XyRyNet_Comm.h>
  6. #include <XyRyNet_Types.h>
  7. #include <XyRyNet_ProtocolHdr.h>
  8. #include <jsoncpp/json/json.h>
  9. #include <NetEngine_PublicLib/NetOperator_Define.h>
  10. #include <NetEngine_PublicLib/NetOperator_Error.h>
  11. #include <NetEngine_Client/NetClient_Socket_Define.h>
  12. #include <NetEngine_Client/NetClient_Socket_Error.h>

  13. //g++ -std=gnu++11 -Wall -g Test_ForMQClient.cpp -o Test_ForMQClient -L ../NetEngine_Release/NetEngine_Release/NetEngine_PublicLib -L ../NetEngine_Release/NetEngine_Release/NetEngine_Client -lNetEngine_BaseLib -lNetClient_Socket -ljsoncpp -Wl,-rpath=../NetEngine_Release/NetEngine_Release/NetEngine_PublicLib:../NetEngine_Release/NetEngine_Release/NetEngine_Client

  14. SOCKET m_Socket;
  15. void ServiceApp_Stop(int signo)
  16. {
  17.     printf("客户端退出!\n");
  18.     NetClient_TCPSelect_Close(m_Socket);
  19.     exit(0);
  20. }
  21. void MQ_Post(LPCTSTR lpszMsgBuffer,TCHAR *ptszMsgBuffer,int *pInt_Len)
  22. {
  23.     LPCTSTR lpszAddr = _T("127.0.0.1");
  24.     NETENGINE_PROTOCOLHDR st_ProtocolHdr;
  25.     memset(&st_ProtocolHdr,'\0',sizeof(NETENGINE_PROTOCOLHDR));

  26.     st_ProtocolHdr.unProHeader = NETENGIEN_HELPCOMPONENTS_PACKET_PROTOCOL_HEADER;
  27.     st_ProtocolHdr.unOperatorType = ENUM_HELPCOMPONENTS_PACKET_PROTOCOL_TYPE_CUSTOM;
  28.     st_ProtocolHdr.wVersion = 1;
  29.     st_ProtocolHdr.unStringCoder = 0;
  30.     st_ProtocolHdr.wPacketSerial = 0;          //序列号,如果永久存在包,这个值需要设置,你自己管理,不然你无法获取多个包
  31.     st_ProtocolHdr.wIsReply = FALSE;          //是否获取投递成功还是失败的协议包
  32.     st_ProtocolHdr.unProTail = NETENGIEN_HELPCOMPONENTS_PACKET_PROTOCOL_TAIL;

  33.     Json::Value st_JsonRoot;
  34.     st_JsonRoot["PacketPost"] = 0;                 //0投递,1获取
  35.     st_JsonRoot["KeepTime"] = 0;                   //保存时间,单位秒,如果为0,获取一次后被抛弃。-1 永久存在,ClientAddr不能为空,如果有多个永久存在的包wPacketSerial 最好设置值,不然你无法获取多个包
  36.     st_JsonRoot["IPProtocol"] = 1;                  //哪种类型用户可以获取 1 TCP 2 UDP
  37.     st_JsonRoot["ClientAddr"] = lpszAddr;         //如果不指定,可以不要,删除即可
  38.     st_ProtocolHdr.unPacketSize = st_JsonRoot.toStyledString().length() + _tcslen(lpszMsgBuffer);
  39.     NetEngine_OperatorBit_BYTEWrite(&st_ProtocolHdr.unOperatorCode,sizeof(st_ProtocolHdr.unOperatorCode),1,_tcslen(lpszMsgBuffer));
  40.     NetEngine_OperatorBit_BYTEWrite(&st_ProtocolHdr.unOperatorCode,sizeof(st_ProtocolHdr.unOperatorCode),2,st_JsonRoot.toStyledString().length());

  41.     *pInt_Len = sizeof(NETENGINE_PROTOCOLHDR) + st_ProtocolHdr.unPacketSize;
  42.     memcpy(ptszMsgBuffer,&st_ProtocolHdr,sizeof(NETENGINE_PROTOCOLHDR));
  43.     memcpy(ptszMsgBuffer + sizeof(NETENGINE_PROTOCOLHDR),st_JsonRoot.toStyledString().c_str(),st_ProtocolHdr.unPacketSize);
  44.     memcpy(ptszMsgBuffer + sizeof(NETENGINE_PROTOCOLHDR) + st_JsonRoot.toStyledString().length(),lpszMsgBuffer,_tcslen(lpszMsgBuffer));
  45. }
  46. void MQ_Get(TCHAR *ptszMsgBuffer,int *pInt_Len)
  47. {
  48.     LPCTSTR lpszAddr = _T("127.0.0.1");
  49.     NETENGINE_PROTOCOLHDR st_ProtocolHdr;
  50.     memset(&st_ProtocolHdr,'\0',sizeof(NETENGINE_PROTOCOLHDR));

  51.     st_ProtocolHdr.unProHeader = NETENGIEN_HELPCOMPONENTS_PACKET_PROTOCOL_HEADER;
  52.     st_ProtocolHdr.unOperatorType = ENUM_HELPCOMPONENTS_PACKET_PROTOCOL_TYPE_CUSTOM;
  53.     st_ProtocolHdr.wVersion = 1;
  54.     st_ProtocolHdr.unStringCoder = 0;
  55.     st_ProtocolHdr.wPacketSerial = 0;
  56.     st_ProtocolHdr.wIsReply = TRUE;                  //必须为真
  57.     st_ProtocolHdr.unProTail = NETENGIEN_HELPCOMPONENTS_PACKET_PROTOCOL_TAIL;

  58.     Json::Value st_JsonRoot;
  59.     st_JsonRoot["PacketPost"] = 1;
  60.     st_JsonRoot["KeepTime"] = 0;
  61.     st_JsonRoot["IPProtocol"] = 1;
  62.     st_JsonRoot["ClientAddr"] = lpszAddr;
  63.     st_ProtocolHdr.unPacketSize = st_JsonRoot.toStyledString().length();
  64.     NetEngine_OperatorBit_BYTEWrite(&st_ProtocolHdr.unOperatorCode,sizeof(st_ProtocolHdr.unOperatorCode),2,st_JsonRoot.toStyledString().length());

  65.     *pInt_Len = sizeof(NETENGINE_PROTOCOLHDR) + st_ProtocolHdr.unPacketSize;
  66.     memcpy(ptszMsgBuffer,&st_ProtocolHdr,sizeof(NETENGINE_PROTOCOLHDR));
  67.     memcpy(ptszMsgBuffer + sizeof(NETENGINE_PROTOCOLHDR),st_JsonRoot.toStyledString().c_str(),st_ProtocolHdr.unPacketSize);
  68. }
  69. //UDP需要发送此封包
  70. void MQ_Leave(TCHAR *ptszMsgBuffer,int *pInt_Len)
  71. {
  72.     NETENGINE_PROTOCOLHDR st_ProtocolHdr;
  73.     memset(&st_ProtocolHdr,'\0',sizeof(NETENGINE_PROTOCOLHDR));

  74.     st_ProtocolHdr.unProHeader = NETENGIEN_HELPCOMPONENTS_PACKET_PROTOCOL_HEADER;
  75.     st_ProtocolHdr.unOperatorType = ENUM_HELPCOMPONENTS_PACKET_PROTOCOL_TYPE_LEAVE;
  76.     st_ProtocolHdr.wVersion = 1;
  77.     st_ProtocolHdr.unStringCoder = 0;
  78.     st_ProtocolHdr.wPacketSerial = 0;
  79.     st_ProtocolHdr.unPacketSize = 0;
  80.     st_ProtocolHdr.wIsReply = FALSE;                  //必须为真
  81.     st_ProtocolHdr.unProTail = NETENGIEN_HELPCOMPONENTS_PACKET_PROTOCOL_TAIL;

  82.     *pInt_Len = sizeof(NETENGINE_PROTOCOLHDR);
  83.     memcpy(ptszMsgBuffer,&st_ProtocolHdr,sizeof(NETENGINE_PROTOCOLHDR));
  84. }
  85. int main(int argc,char **argv)
  86. {
  87.     LPCTSTR lpszServiceAddr = _T("127.0.0.1");
  88.     LPCTSTR lpszMsgBuffer = _T("123456789aaa");
  89.     int nLen = 0;

  90.     TCHAR tszClientAddr[64];
  91.     TCHAR tszMsgBuffer[2048];

  92.     memset(tszClientAddr,'\0',sizeof(tszClientAddr));
  93.     memset(tszMsgBuffer,'\0',sizeof(tszMsgBuffer));

  94.     if (!NetClient_UDPSelect_Init(lpszServiceAddr,5656))
  95.     {
  96.         printf("连接失败!\n");
  97.         return -1;
  98.     }
  99.     printf("连接成功!\n");

  100.     printf("%d\n",argc);
  101.     if (1 == argc)
  102.     {
  103.         MQ_Post(lpszMsgBuffer,tszMsgBuffer,&nLen);
  104.         if (!NetClient_UDPSelect_Send(tszMsgBuffer,nLen))
  105.         {
  106.             printf("发送投递失败!\n");
  107.             return -1;
  108.         }
  109.         printf("投递数据包成功!\n");
  110.     }
  111.     else
  112.     {
  113.         MQ_Get(tszMsgBuffer,&nLen);
  114.         if (!NetClient_UDPSelect_Send(tszMsgBuffer,nLen))
  115.         {
  116.             printf("发送获取失败!\n");
  117.             return -1;
  118.         }

  119.         while (TRUE)
  120.         {
  121.             nLen = 2048;
  122.             memset(tszMsgBuffer,'\0',sizeof(tszMsgBuffer));
  123.             if (NetClient_UDPSelect_Recv(tszMsgBuffer,&nLen,tszClientAddr))
  124.             {
  125.                 NETENGINE_PROTOCOLHDR st_ProtocolHdr;
  126.                 memset(&st_ProtocolHdr,'\0',sizeof(NETENGINE_PROTOCOLHDR));

  127.                 memcpy(&st_ProtocolHdr,tszMsgBuffer,sizeof(NETENGINE_PROTOCOLHDR));
  128.                 printf("接受到数据:%d 类型:%X,长度:%d,内容:%s\n",nLen,st_ProtocolHdr.unOperatorCode,st_ProtocolHdr.unPacketSize,tszMsgBuffer + sizeof(NETENGINE_PROTOCOLHDR));
  129.                 break;
  130.             }
  131.             sleep(1);
  132.         }
  133.     }

  134.     nLen = 2048;
  135.     memset(tszMsgBuffer,'\0',sizeof(tszMsgBuffer));
  136.     MQ_Leave(tszMsgBuffer,&nLen);
  137.     NetClient_UDPSelect_Send(tszMsgBuffer,nLen);
  138.     return 0;
  139. }
  140. //TCP
  141. int main1(int argc,char **argv)
  142. {
  143.     LPCTSTR lpszServiceAddr = _T("127.0.0.1");
  144.     LPCTSTR lpszMsgBuffer = _T("123456789aaa");
  145.     int nLen = 0;
  146.     TCHAR tszMsgBuffer[2048];
  147.     memset(tszMsgBuffer,'\0',sizeof(tszMsgBuffer));

  148.     if (!NetClient_TCPSelect_Create(lpszServiceAddr,5655,&m_Socket))
  149.     {
  150.         printf("连接失败!\n");
  151.         return -1;
  152.     }
  153.     printf("连接成功!\n");

  154.     printf("%d\n",argc);
  155.     if (1 == argc)
  156.     {
  157.         MQ_Post(lpszMsgBuffer,tszMsgBuffer,&nLen);
  158.         if (!NetClient_TCPSelect_SendMsg(m_Socket,tszMsgBuffer,nLen))
  159.         {
  160.             printf("发送投递失败!\n");
  161.             return -1;
  162.         }
  163.         printf("投递数据包成功!\n");

  164.         while (TRUE)
  165.         {
  166.             nLen = 2048;
  167.             memset(tszMsgBuffer,'\0',sizeof(tszMsgBuffer));
  168.             if (NetClient_TCPSelect_RecvMsg(m_Socket,tszMsgBuffer,&nLen))
  169.             {
  170.                 NETENGINE_PROTOCOLHDR st_ProtocolHdr;
  171.                 memset(&st_ProtocolHdr,'\0',sizeof(NETENGINE_PROTOCOLHDR));

  172.                 memcpy(&st_ProtocolHdr,tszMsgBuffer,sizeof(NETENGINE_PROTOCOLHDR));
  173.                 printf("接受到数据:类型:%X\n",st_ProtocolHdr.unOperatorCode);
  174.                 break;
  175.             }
  176.             sleep(1);
  177.         }
  178.     }
  179.     else
  180.     {
  181.         MQ_Get(tszMsgBuffer,&nLen);
  182.         if (!NetClient_TCPSelect_SendMsg(m_Socket,tszMsgBuffer,nLen))
  183.         {
  184.             printf("发送获取失败!\n");
  185.             return -1;
  186.         }

  187.         while (TRUE)
  188.         {
  189.             memset(tszMsgBuffer,'\0',sizeof(tszMsgBuffer));
  190.             if (NetClient_TCPSelect_RecvMsg(m_Socket,tszMsgBuffer,&nLen))
  191.             {
  192.                 NETENGINE_PROTOCOLHDR st_ProtocolHdr;
  193.                 memset(&st_ProtocolHdr,'\0',sizeof(NETENGINE_PROTOCOLHDR));

  194.                 memcpy(&st_ProtocolHdr,tszMsgBuffer,sizeof(NETENGINE_PROTOCOLHDR));
  195.                 printf("接受到数据:类型:%X,长度:%d,内容:%s\n",st_ProtocolHdr.unOperatorCode,st_ProtocolHdr.unPacketSize,tszMsgBuffer + sizeof(NETENGINE_PROTOCOLHDR));
  196.                 break;
  197.             }
  198.             sleep(1);
  199.         }
  200.     }
  201.         return 0;
  202. }
复制代码




缘起,在人群中,我看见你。。缘灭,我看见你,在人群中。

27

主题

37

帖子

243

积分

管理员

CEO

Rank: 9Rank: 9Rank: 9

积分
243

突出贡献荣誉管理论坛元老

QQ
 楼主| 发表于 2017-4-28 13:40:10 | 显示全部楼层
当然,你也可以使用我们的测试服务器进行测试,测试服务器有限制。不能使用UDP,最大消息队列为10
下载地址:http://dl.xyry.org/NetEngine_Ser ... ne_MQServiceApp.zip     (Windows 32bit)
缘起,在人群中,我看见你。。缘灭,我看见你,在人群中。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|XyRy Co.Ltd

GMT+8, 2018-2-25 04:02 , Processed in 0.015556 second(s), 29 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表