`
囧囧有神
  • 浏览: 207798 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

消息的同步发送,异步发送以及消息发送的可靠性

阅读更多

最近写的一个通信框架中有两种最基本的消息发送方式:同步发送和异步发送

同步方式:

消息的发送方发A送一条消息到接收端B,B收到消息之后需要对消息进行处理,然后

发送ACK确认消息回A,A收到B的ACK之后就可以认为这条消息发送成功,并且保证B顺利收到并处理,在A收到ACK之前A将一直处于阻塞等待状态。

 

异步方式:

可细分成送线程和接受线程异步,发送端进程和接收端进程异步

 

发送线程和接收线程的异步指消息发送线程A发消息到B,A和B都有消息的接收和发送缓存,A将消息送入发缓存之后立即返回接着发下一条消息,缓存中的消息将被逐条写入TCP,B端从TCP拿到消息先入收缓存,B从收缓存中逐条取出处理,这里的收发两个线程处于不同的进程中,且同一时间可能同时处理不同的消息。

 

发送端进程和接收端端进程异步指的是,发送方和接收方不必同时在线,A将消息发送到消息队列,B上线之后从消息队列中获取A发送过来的消息。

 

同步和异步发送消息对于消息发送可靠性的保障上有区别。

这里的消息发送可靠性指消息在网络连接异常断开,进程异常重启之后所有的消息都不丢失。

 

同步发送保证了每条消息都被顺利收到并得到处理,若发送消息之后等待ACK超时表示对方可能未妥善收到并处理消息,发送方可以对消息进行重发等操作。因此同步发送的方式一定程度上保证了消息的可靠性。

 

异步方式由于中间存在收发缓存,当接收端进程异常重启,缓存内消息可能丢失,因此发送方发出去的消息并不能保证被接收并得到处理。像线程级的异步来说,必须在收发双方的消息中增加消息序列号,并对发送的每条消息,消息发送的序列号,消息接收的序列号进行持久化,这样进程重启之后可以对双方的序列号进行同步,从持久化模块中取出丢失的部分消息。以这样的方式才能保证消息发送的可靠性。

 

进程级的异步收发两端消息均通过中间的消息队列进行,消息队列最常见的就是消息中间件,JMS,MQ等等,发送端通过同步方式将消息发往消息队列,消息队列必须对消息进行持久化,然后以异步或同步方式发往消息接收方,这里的关键就是发送方和MQ之间通过同步方式和MQ上的消息持久化来保A,B两端的消息发送可靠性。

 

在保证消息发送可靠性的前提下同步方式发送消息的处理性能可能反而超越异步方式的发送,原因是异步发送每条消息需要进行多次地持久化数据。

分享到:
评论
3 楼 囧囧有神 2011-02-24  
stillr 写道
异步发送每条消息需要进行多次地持久化数据???为什么会需要多次呢

有时候为了可靠性需要往多个地方持久化,收消息方可能还需要持久化收到的消息的sequence number,用来系统重启时候通信两端同步序列号,所以在发消息和收到消息这一整条线上看来异步消息比同步消息多了好多次持久化操作。
2 楼 haigui.chen 2011-02-24  
stillr 写道
异步发送每条消息需要进行多次地持久化数据???为什么会需要多次呢

猜测应该是为了消息不因为接收方挂掉而不丢失?
1 楼 stillr 2011-02-24  
异步发送每条消息需要进行多次地持久化数据???为什么会需要多次呢

相关推荐

    HPSocket 同步发送 异步 sqllite模块源码

    在"content.txt"这个文件中,很可能是包含了HPSocket同步发送的代码示例以及使用SQLite进行异步数据库操作的模块源码。这部分内容可能涉及以下几个方面: 1. HPSocket的连接建立和管理:包括客户端如何连接到服务器...

    tcp与udp同步、异步通信

    本程序集包含MFC(Microsoft Foundation Classes)实现的TCP同步、异步服务器和客户端以及UDP同步服务器和客户端,对于学习MFC网络编程的初学者来说,这是一个很好的实践平台。 首先,TCP是一种面向连接的、可靠的...

    完整版本网络编程 TCP Socket 同步、异步

    网络编程是计算机科学中的一个重要领域,它涉及到两个或多个设备之间的数据交换。在这个主题中,TCP(传输控制协议)和Socket编程是...对于那些希望提升网络应用性能和可靠性的人来说,这个压缩包将是一个宝贵的资源。

    tcp的同步与异步

    综上所述,TCP的同步与异步特性是其可靠性和高效性的基石。同步保证了数据的正确排序和确认,异步提供了灵活的数据传输方式。通过三次握手和四次挥手,TCP建立了安全的连接,并通过流量控制和拥塞控制保持网络的稳定...

    c# socket同步通讯 异步通讯 客户端 服务端 实例

    本文将深入探讨C#中的Socket同步通讯与异步通讯,以及如何构建客户端和服务端程序。 首先,让我们了解什么是Socket。Socket是网络通信的基本单元,它允许应用程序通过网络发送和接收数据。在C#中,Socket类位于...

    QT C++ http get、post 同步异步请求

    在QT框架中,进行HTTP通信通常使用QNetworkAccessManager类,它是QT提供的网络访问模块,可以处理HTTP和FTP协议的请求。...在设计和实现时,应充分考虑线程安全和错误处理,确保程序的稳定性和可靠性。

    同步和异步串口

    同步传输是把数据字节组合起来一起发送,这种组合称之为帧,其传输速度比异步传输快。 异步传输是指一次传输一个字符(5~8 位)的数据。每个字符用一个韦始位引导,用一个停止位结束。这样就能使接收方分析出发送方...

    异步数据同步组件

    异步数据同步组件是一种在分布式信息系统中实现数据高效流通的技术,它确保了业务系统的完整性和数据传输的可靠性。这一组件涉及到多个关键领域,包括数据循环、分布式系统架构、异步数据传输、数据同步的四个阶段、...

    [重要]基于Websphere MQ持久化消息实现异步转同步—方案一

    【标题】:“基于Websphere MQ持久化消息实现异步转同步—方案一” 在分布式系统中,异步处理和消息队列(Message Queuing,MQ)是提高系统可扩展性和解耦组件的重要手段。Websphere MQ是IBM提供的一款强大、可靠的...

    同步通信和异步通信的区别

    同步通信和异步通信是两种基本的通信方式,它们在数据传输中有着不同的特点和应用场景。...在实际应用中,根据系统的性能要求、成本预算以及对数据传输速度和可靠性的考虑,设计师会选择最适合的通信模式。

    C#Udp同步和异步编程源代码

    例如,下面的代码展示了如何创建一个简单的UDP同步发送器: ```csharp using System.Net; using System.Net.Sockets; UdpClient udpClient = new UdpClient(); IPEndPoint remoteEP = new IPEndPoint(IPAddress....

    socket同步异步通信.rar

    在"异步发送"和"pc异步发送消息"两个文件中,可能包含了实现异步发送消息的代码示例。这些示例通常会包含以下几个关键步骤: 1. 创建Socket并绑定到本地端口。 2. 使用`BeginAccept`启动异步监听,设置一个回调函数...

    用visual c++编写的串口同步以及异步通信

    **同步通信**指的是发送方和接收方在数据传输过程中保持严格的顺序和时间关系,即发送方发送数据后必须等待接收方的确认才能继续发送下一组数据。在Visual C++中实现串口同步通信,通常需要使用WinAPI函数如...

    [重要]基于Websphere MQ持久化消息实现异步转同步—方案二

    通过使用Websphere MQ(WebSphere Message Broker,一种消息中间件)来处理异步通信,并通过消息的持久化特性,确保消息在异常情况下的可靠性传输,从而将原本的异步操作转化为一种具有确定性的同步行为。...

    易语言通信同步异步支持库

    而异步通信则允许发送方在发送数据后不等待响应,可以立即执行其他任务,提高了系统的并发性能,但可能会牺牲一定的数据可靠性。 在易语言通信同步异步支持库中,开发者可以选择适合当前应用场景的通信方式。对于...

    异步时钟域同步化处理方法

    本文将深入探讨几种异步时钟域同步化处理的方法,以确保系统稳定性和可靠性。 首先,我们来理解一下什么是异步时钟域。在FPGA设计中,不同的模块或功能块可能由不同的时钟源驱动,这些时钟源的频率可能相同也可能...

    简单的activemq点对点的同步消息模型

    在“简单的activemq点对点的同步消息模型”中,我们将探讨如何构建一个基本的、基于ActiveMQ的点对点消息传递系统,以及它的工作原理。 1. **点对点模型**:在JMS中,点对点模型(P2P)是一种消息传递模式,其中...

    C51单片机的串口异步通信和同步通信的区别

    在计算机系统中,CPU与外部设备进行通信的方式主要有两种:并行通信和串行通信。并行通信是指数据的每一位同时进行传送,这种方式传输...总之,选择合适的通信方式,可以有效提高单片机系统的数据传输效率和可靠性。

    java发送短信系列之同步、异步发送短信

    - 日志和监控:实现短信发送功能时,应该记录日志以及监控发送成功率和失败原因,以确保短信服务的稳定性和可靠性。 通过上述介绍,我们可以看到,无论是同步还是异步发送短信,背后都有其适用场景和考量。开发者在...

    QQ发送消息.zip_IHZ_delphi 发送消息_mile2h5_qq发送消息_消息发送

    3. 同步和异步:选择合适的方式处理发送消息的流程,可能是同步等待结果,也可能是异步处理以避免阻塞用户界面。 4. 授权机制:正确处理QQ账号的登录和授权,可能需要使用OAuth或其他腾讯提供的安全机制。 5. 错误...

Global site tag (gtag.js) - Google Analytics