`
tower
  • 浏览: 244712 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

避免使用消息队列收请求,TCP转发请求的编程模式

阅读更多

有一些应用,在最初设计的时候,采用的是一个进程阻塞在消息队列上,读消息,当读到消息后,再把请求发到TCP的链接上去。这个模型看似没什么问题,但是实际工作中有一个不是很好处理的问题:


当TCP链路中断后,阻塞在消息队列的进程无法处理这个关闭的请求。

 

在unix网络编程的第5章里面,作者举了一个阻塞在stdin上读数据,转发到TCP上的例子,这个例子在服务端关闭链接的情况下,客户端因为阻塞在读stdin上面,而得到一个CLOSE_WAIT的TCP状态。作者同时在后面的章节里面,提供了一个用多路复用来解决的办法。


可惜的是,消息队列并不支持多路复用,所以本文标题所说的这种模式,是存在很大的局限性的。如果前端必须用消息队列的话,解决的办法大致有下面两种:


1、使用多线程来管理那个TCP链接;
2、不用TCP,而用FIFO来转发请求。

 

在Unix环境高级编程这本书里面,对消息队列的这种局限性有足够的说明,在实际工作中如果能够避免使用消息队列的话,还是别用,一般来说进程间的“通讯”,FIFO足够用了。

分享到:
评论

相关推荐

    libevent+socket+消息队列 高效实现网络数据的接收处理

    在这种场景下,“libevent+socket+消息队列”是一个常见的解决方案,它结合了事件驱动编程、网络通信和异步任务处理的优势。下面将详细探讨这个组合中的各个组成部分及其作用。 1. **libevent**: Libevent是一个...

    基于redis实现的消息队列

    - **流量削峰**:当系统面临瞬时高并发访问时,消息队列可以暂时存储请求,避免系统崩溃。 - **解耦服务**:不同的服务之间通过消息队列通信,降低依赖性,提高系统的健壮性。 - **分布式事务**:消息队列可以作为...

    一个Http请求处理工具

    描述中提到了“Socket C#消息队列的创建”,这涉及到两个概念:Socket编程和消息队列。Socket是网络通信的基本组件,允许程序通过网络发送和接收数据。在C#中,可以使用System.Net.Sockets命名空间来创建和管理...

    C++ TCP/IP 编程

    5. **监听**:对于服务器端,使用`listen()`函数设置最大连接队列长度,等待客户端的连接请求。 6. **连接**:客户端使用`connect()`函数发起连接请求,服务器端使用`accept()`函数接收连接请求并返回一个新的套接字...

    TCP/IP协议编程

    TCP/IP协议编程是网络通信的基础,对于任何涉及网络应用开发的程序员来说,理解和掌握这一领域至关重要。本教程适合初学者,旨在深入浅出地介绍TCP/IP协议及其在编程中的应用,特别是通过socket进行网络通信的方法。...

    Linux TCP 编程步骤

    在Linux系统中,TCP(传输控制协议)编程是网络编程的核心部分,主要用于创建可靠的、面向连接的通信。本文将详细讲解TCP编程的三个主要模型:基本服务器模型、循环服务器模型和并发服务器模型,并提供相关代码及...

    Linux系统TCP/IP编程

    Linux系统中的TCP/IP编程是网络通信的核心技术,它允许应用程序通过网络进行数据交换。本教程将深入探讨如何在Linux环境中构建TCP/IP通信程序,以及如何利用Linux提供的丰富的系统调用和函数来实现这一目标。 首先...

    linux下tcp简单的socket编程

    4. **监听连接请求**:对于服务器端,使用`listen()`函数设置最大连接队列长度,准备接受客户端连接。 ```c listen(socket_desc, 3); ``` 5. **接受连接**:调用`accept()`函数接收客户端的连接请求,返回一个新的...

    基于TCP和IP协议编程

    ### 基于TCP和IP协议编程:C# .net2.0套接字编程实例与UDP/TCP通信 在计算机网络中,TCP/IP(传输控制协议/互联网协议)是两个核心协议,它们定义了数据如何在网络中传输、路由以及接收。本篇将围绕C# .NET 2.0中的...

    zeromq消息队列

    ZeroMQ不仅仅是一个消息队列,它更像一个网络通信框架,提供了多种高级通信模式,如发布/订阅、请求/应答和推送/拉取等。下面我们将深入探讨ZeroMQ的核心概念、特性以及如何在实际应用中使用它。 首先,我们来看...

    C语言套接字编程TCP连接

    本主题将详细探讨如何使用C语言进行TCP套接字编程,包括服务器端和客户端的实现。 一、TCP套接字编程基础 1. 套接字库与函数: 在C语言中,我们主要依赖`<sys/socket.h>`和`<netinet/in.h>`头文件中的函数来实现套...

    C# 使用Socket发送和接收TCP数据

    C#是一种广泛用于构建桌面和Web应用程序的编程语言,它提供了强大的网络编程能力,其中包括使用Socket进行TCP/IP通信。本篇文章将深入探讨如何在C#中使用Socket类来实现TCP数据的发送和接收。 TCP(Transmission ...

    基于Linux的TCP网络编程

    在基于Linux的TCP网络编程中,开发者需要理解服务器和客户端的工作模式,以及涉及的主要函数。TCP(Transmission Control Protocol)是一种面向连接的、可靠的传输层协议,广泛用于互联网上的应用程序通信。 1. **...

    TCP/IP网络编程(CSocket)

    TCP/IP网络编程是计算机通信领域中的重要组成部分,它允许设备之间进行数据交换。在这个场景中,我们关注的是使用Microsoft Foundation Class (MFC)库中的CSocket类来实现一个基于TCP的简单网络聊天程序。CSocket类...

    模拟TCP通信(SOCKET编程)

    - 在编程中,我们通常使用socket库来创建SOCKET对象,它代表了网络上的一个通信端点,也称为套接字。 - 创建SOCKET时,需要指定协议类型,对于TCP通信,我们选择SOCK_STREAM。 - 绑定(bind)SOCKET到本地地址,...

    TCP.zip_LabVIEW的TCP_TCP_labview_labview一对多tcp_labview网络编程

    在描述中提到的一对一、多对一以及一对多的TCP通信模式,是网络编程中的常见场景: 1. **一对一**:这是最基本的TCP通信模型,一个服务器端与一个客户端之间建立连接,进行数据交互。在LabVIEW中,可以创建一个TCP...

    tcp\udp高级编程(VC)

    在VC++中实现TCP编程,需要使用Windows Socket API(Winsock),这是一组用于编写网络应用程序的函数接口。开发人员可以利用socket函数创建、绑定、监听和接受连接,然后通过send和recv函数发送和接收数据。 UDP...

    select模型构造发送队列,保证tcp数据发送可靠性

    在计算机网络编程中,TCP(Transmission Control Protocol)是一种面向连接的、可靠的传输协议,它确保了数据在互联网上的完整性和顺序。为了优化TCP服务的性能并确保数据的可靠性,开发者通常会采用各种策略,其中...

    TCP作为服务端接收来自客户端的连接

    本篇文章将详细探讨如何使用TCP作为服务端来接收来自多个客户端的连接,特别是在Visual Studio 2010环境下,结合C++语言和简单的用户界面实现这一功能。 首先,我们需要理解TCP的基本工作原理。TCP是一种面向连接的...

    专题资料(2021-2022年收藏)基于TCP的服务器客户端编程汇总.doc

    在TCP服务器编程中,`bind()`和`listen()`函数确保服务器准备好接收连接请求,而`accept()`则处理实际的连接。在客户端,`connect()`建立到服务器的连接。在两端,`send()`和`recv()`用于在已建立的连接上进行数据...

Global site tag (gtag.js) - Google Analytics