客户端/服务器通信中的中间件

Posted

技术标签:

【中文标题】客户端/服务器通信中的中间件【英文标题】:Middleware in client/server communication 【发布时间】:2012-09-24 22:30:46 【问题描述】:

我正在用 C++ 构建一个客户端/服务器对,并且我使用 winsock 进行通信。但是,我无法在 C++ 中找到任何库,通过它我可以实现一些东西,而不是直接从客户端向服务器发送请求,而是存储请求,然后与服务器通信。

是否有任何方法或库可以将请求发送给代理,反之亦然?将存储请求,然后将与服务器通信的东西。这些是我已经在使用的库:

#pragma comment( linker, "/defaultlib:ws2_32.lib")
#include <WinSock2.h>
#include <winsock.h>
#include <stdio.h>
#include <iostream>
#include <string.h>
#include <windows.h>
#include <ws2tcpip.h>
#include <fstream>
using namespace std;

#define HOSTNAME_LENGTH 20
#define RESP_LENGTH 40
#define FILENAME_LENGTH 20
#define REQUEST_PORT 5001
#define BUFFER_LENGTH 1024 
#define TRACE 0
#define MSGHDRSIZE 8 //Message Header Size

【问题讨论】:

您希望这个“经纪人”具体做什么?您发布的代码有什么意义? 我希望这个代理接受来自客户端的多个请求,然后排队并将它们一一发送到服务器以处理请求。代码的意义在于我告诉我我已经使用了这些库..我想知道 C++ 中是否有任何库可以用于此目的,或者我可以用 winsock 做一些事情。 听起来您可能正在寻找类似zeromq 的东西,但这可能比您需要的复杂得多。在简单的服务器中,如果需要严格按顺序处理请求,服务器软件本身会在内部对请求进行排队并一一处理。 是的,我知道服务器会这样做,但我需要服务器和客户端之间的一些东西来完成这项工作。就像客户端使用该代理的地址而不是服务器地址来发送请求一样。 我也不确定您说“经纪人”时的意思。您是否正在寻找在它自己的进程或线程中运行的中间服务作为代理?您是否正在寻找一个抽象网络通信 (CSocket) 的进程内库?重点是排队还是抽象?像对象请求代理或 AM​​QP 或 RabbitMQ 等消息传递协议一样重的东西? 【参考方案1】:

您需要编写自己的库来实现您的目标。我认为拥有这样的“代理”没有任何实际用途,它只是将请求堆叠起来并一一发送,因此没有商业可用。你可以写一个,如果你真的想要这样的东西,它不会是一项艰巨的任务。这可能是您应用程序的特定需求,我会让您上面的 WinSock 代码足够智能以处理它并避免搜索/编写这样的库。

您可能还想考虑 microsoft REST HTTP 库(aka casablanca),并在编写此类库之前阅读以下博客文章。

http://blogs.msdn.com/b/vcblog/archive/2013/07/10/intercepting-http-request_2f00_response-using-c_2b002b00_-rest-http-library.aspx

【讨论】:

【参考方案2】:

您所描述的是消息队列。查看 MSMQ(Microsoft 消息队列)或 RabbitMQ。这将允许您的客户端应用程序向队列发送请求。然后,您的服务器将从队列中读取请求并酌情处理它们。

【讨论】:

以上是关于客户端/服务器通信中的中间件的主要内容,如果未能解决你的问题,请参考以下文章

p2p通信原理及实现(转)

P2P通信原理与实现(02)

客户端与服务器通信

01_JMS概述

面试官:如果让你设计一个消息中间件,如何将其网络通信性能优化10倍以上?石杉的架构笔记

.net下的面向工控领域的远程方法调用(RMI)中间件,客户端协议栈应答端实现