客户端/服务器通信中的中间件
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) 的进程内库?重点是排队还是抽象?像对象请求代理或 AMQP 或 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。这将允许您的客户端应用程序向队列发送请求。然后,您的服务器将从队列中读取请求并酌情处理它们。
【讨论】:
以上是关于客户端/服务器通信中的中间件的主要内容,如果未能解决你的问题,请参考以下文章