linux - 在 tcp "long"连接和 "short"连接之间选择内部服务

标签 linux sockets tcp

我有一个应用程序,Web 服务器将一些请求重定向到后端服务器,后端服务器(Linux)将对 Web 服务器进行复杂的计算和响应。 对于web服务器和后端服务器之间的tcp socket连接管理,我认为有两种基本策略:

  1. “短”连接:即每个请求一个连接。这对于套接字管理和简化整个程序结构来说似乎非常容易。 接受后,我们只需要一些线程来处理请求,最后关闭这个套接字。

  2. “长”连接:即对于一个tcp连接,可以有多个请求一个接一个。似乎这种策略可以更好地利用套接字资源并带来一些性能提升(我不太确定)。 但是 这似乎比“短”连接带来了很多复杂性。例如,由于现在socket fd可能被多线程使用,所以必须涉及到同步。还有更多,socket失败过程,消息序列...

这两个策略有什么建议吗?

更新:,@SargeATM 的回答提醒我应该详细介绍后端服务。 每个请求都是上下文无关的。后端服务可以根据一条请求消息进行计算。好像是……无国籍。

最佳答案

在不深入我认为对这个决定有重大影响的后端架构的情况下,我更喜欢无状态“快速”请求/响应类型流量的短连接和同步或文件传输等有状态协议(protocol)的长连接。

我知道建立新连接(如果它不是本地主机)会产生一些 tcp 开销,但这从来都不是我必须在我的应用程序中优化的任何内容。

好的,我会稍微了解一下架构,因为这很重要。我总是不是按请求而是按功能使用线程。所以我会有一个在套接字上监听的线程。另一个线程从所有事件连接中读取数据包,另一个线程执行后端计算,最后一个线程在需要时保存到数据库。这使事情变得干净和简单。易于测量慢点、维护并在以后需要时进行优化。

关于linux - 在 tcp "long"连接和 "short"连接之间选择内部服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11406405/

相关文章:

sockets - 什么是 TCP 连接的开销流量(加上 TCP 说明)?

c - 在父进程终止时向子进程树发出 SIGKILL

linux - 使用 gnu DDD 进行远程调试

java - Java中有缓冲区填充接收方法吗?

ios - 应用程序在后台运行3分钟

java - 在 Java TCP 中接受多个客户端

linux - 如何重定向 dhcp (Linux)

c++ - C/C++ 进程如何知道它是否在后台运行?

Python TCP 几个同时监听多个端口

java - 从Java Web应用程序控制C应用程序