消息发送与接收,存在同步机制与异步机制。
同步机制
消息发送与消息接收存在先后关系,例如先执行消息发送,发送结束后,紧接着就会堵塞当前自身的进程,不与其他应用进行任何的通信以及交互,等待接收程序的响应,待发送消息得到接收程序的返回消息之后会继续向下运行,进行下一步的业务处理。
试用场景:请求数据查询
- 组织数据查询请求这帧消息
- 将请求消息进行发送
- 发送完毕后,立即进入消息接收状态,在里面循环等待,直到等到请求响应帧,将响应的数据返回。或者没有等到响应帧,可以设置一个超时时间,超过超时时间后,返回请求失败。
异步机制
消息发送和消息接收没有先后关系,相互独立,接收和发送可以同时进行。
试用场景:qq聊天
- 消息发送和消息接收相互独立,无需等待。
- 可以持续发送也可以持续接收。
- 可以边发送边接收
异步机制是否可以取代同步机制?
虽然异步机制优点颇多,但是其无法取代同步机制,有些场合适用同步机制却不适用异步机制。例如:
数据查询,需要及时获取结果,然后用此结果去执行其他操作。来看看同步机制与异步机制处理此问题的区别:
- 在异步机制中,消息发送和接收是相互独立的,不一定在同一线程中,且需要在接收线程中才能得到查询结果,这样获取的结果需要花功夫搬运到查询的地方,很麻烦。
- 同步机制可以完美解决此问题,发送完查询请求后,阻塞,就地等待查询结果,拿结果就地解决问题,无需像同步机制一样将结果从接收线程中搬运过来。