这个问题可能稍微偏离主题,但我不知道还有什么要问的。我正在阅读此https://github.com/msgpack-rpc/msgpack-rpc/blob/master/spec.md,并看到该规范包括能够使用相同的连接发送乱序消息。
我之前完成TCP套接字编程的唯一方法是在套接字上同步发送请求,例如,我将打开一个套接字127.0.0.1
,通过该套接字向该服务器发送请求并等待响应。当我收到我发送的请求的响应时,我通过在客户端上调用close()
并在响应请求后调用服务器上的close()
来关闭该连接。
对于后台,我正在使用libevent
进行C ++项目,以执行与RPC系统非常相似的操作,因此我想知道在底层传输系统中应该使用哪个请求响应套接字循环。
在C ++ thrift中有一个名为open()
的客户端方法(可能)打开一个连接并保持打开状态,直到你调用close()
。这在抽象的系统中如何工作?例如,我在上面包含的messagepack-RPC链接。什么是最好的行动方案?如果没有,则打开一个连接,发送请求,并且当所有先前的请求都在该连接附近提供服务时(在服务器上,当所有未决请求都被响应时调用close()
)?或者我们是否必须以某种方式尝试将该连接保持活动一段时间,超出请求生命周期?服务器和客户端将如何知道该时间段是什么?例如,我们应该在套接字上注册一个读事件处理程序,并在recv()
返回0
时关闭连接吗?
如果这是一个不同系统解决方案不同的问题,那么有人可以指引我使用一种资源来阅读可能存在连接的模式(最好是在事件驱动系统中)吗?例如,我读到HTTP服务器始终保持连接打开,为什么?不保持每个连接都打开意味着服务器本质上会泄漏内存吗?
对于看似基本的问题感到抱歉,我以前只做过非常简单的TCP套接字编程,所以我可能不知道事情是怎么做的。
答案 0 :(得分:2)
所有这些都是大多数HTTP实现已经运行的方式。注意两端的超时控制每个端的空闲资源使用情况。