`
yjl49
  • 浏览: 113754 次
社区版块
存档分类
最新评论

一个S2S通信中的同步、异步问题的解决

阅读更多

最近在搞Openfire S2S时遇到了一个数据通信时的同步与异步问题。具体描述如下:

OF中的基本通信结构如下:

客户端与服务器的通信是同步的,服务器与服务器之间的通信却是异步的:客户端发送一个请求后就会阻塞一段时间,等待服务器的响应;服务器之间则采用消息通知的方式异步交流数据。

所以会出现下面这种情况:

客户端发送消息给服务器A,消息经入口路由到相应的功能模块进行处理,而此时需要从B服务器中获取一些额外的数据,比如验证发送上来的账号是否在另外的服务器有注册。一般情况下数据在本地的话就直接查找处理再给用户返回就行,但在其它服务器时直接返回就会出现结果错误或不完整,不返回则造成客户端超时。

处理这种情况的方法就是:接收到客户端的请求后,服务器A发送消息给B查询数据,同时将客户端的请求阻塞一个小的时间段(保证客户端不超时),等B返回数据后再继续执行下面的逻辑。(看了OF代码才明白了)

以查询是否为注册用户为例,OF是如下实现的:

 

 

再来看看外层路由是如何捕获查询结果消息,并交给相应的业务逻辑处理的:


结合上面的那段代码,就可以看出OF中是如何实现这个功能的了。

 

但这种做法的缺点也是很明显的:

1.需要原进程阻塞一个固定时间

2.需要每个涉及到同步、异步问题的地方都有一个接收结果的机制

所以可以针对以上两点做些改进。

 

分享到:
评论

相关推荐

    STC15F2K60S2串口通信程序代码

    在实际应用中,开发者可能会遇到一些常见问题,如波特率不匹配、数据丢包、串口冲突等,这些问题通常通过调试和优化代码来解决。STC15F2K60S2的串口通信程序代码通常包含初始化设置、数据发送、数据接收以及错误处理...

    Uart异步串口通信verilog源码

    UART(Universal Asynchronous Receiver...在实际项目中,开发者需要综合运用这些知识来构建一个可靠的、高效的UART模块。在提供的压缩包文件"uart"中,可能包含了实现这些功能的Verilog源代码,可以进一步学习和研究。

    异步通信串口的接收模块设计

    4. **s3**:采样状态,将`rx_sync`的值存储到`dat`数组中,然后增加计数器`cnt`,接着回到`s2`继续采样下一个位。 5. **s4**:停止状态,表示一帧数据接收完成。`data`赋值为`dat`,`read`信号被置高,然后状态机...

    S2Flex2-1.1.0

    S2Flex2-1.1.0是一个专为Flash播放器设计的软件库,它使得开发者能够利用Adobe Flex这一强大的客户端开发工具与Seasar2服务器端框架进行无缝集成。本文将深入探讨S2Flex2的核心功能、工作原理以及在实际项目中的应用...

    异步FIFO设计与使用

    在数字系统设计中,尤其是在复杂的System-on-Chip (SoC) 设计中,异步FIFO(First In First Out)是一种不可或缺的组件,用于数据缓冲和不同时钟域之间的通信。异步FIFO设计涉及多个关键知识点,包括时钟域的管理和...

    直播卫星广播电视技术标准DVB-S与DVB-S2.pdf

    卫星直播电视技术标准DVB-S与DVB-S2 直播卫星广播电视技术标准DVB-S与DVB-S2是卫星直播系统中的核心技术规范,负责广播电视信号的传输和处理。...DVB-S2技术的出现,标志着卫星直播电视技术的又一个飞跃。

    串口通信_串口通信_provezfo_

    在这个项目中,我们关注的是"串口通信_provezfo_",这可能是一个关于串口通信的实践教程或代码库,特别针对STC15F2K60S2单片机的串口1通信进行了测试,并且被验证为有效的。 STC15F2K60S2是一款常见的8位单片机,由...

    STC15F2K60S2串口发送字符

    在嵌入式系统开发中,微控制器(MCU)如STC15F2K60S2常常被用于通信接口的设计,其中串行通信接口(Serial Port Interface, ...在实际项目中,还可能需要处理中断、多任务同步等问题,以确保串口通信的稳定性和可靠性。

    CKTX_STC15F2K60S2例程_stc15f2k60s2_

    这个压缩包中的"CKTX_STC15F2K60S2例程_stc15f2k60s2_"是一个关于如何在该微控制器上实现串口通信的实例代码。下面将详细解释STC15F2K60S2的特点以及串口通信的基本原理,并分析可能包含在"CKTX.C"和"CKTX.OBJ"文件...

    操作系统实验进程通信.pdf

    掌握用邮箱方式进行进程通信的方法,并通过设计实现简单邮箱理解进程通信中的同步问题以及解决该问题的方法。 实验原理: 邮箱机制类似于日常使用的信箱。对于用户而言使用起来比较方便,用户只需使用 send()向...

    test_uart.rar_fpga_fpga 串口_uart fpga_uart串口_串口通信

    UART(通用异步收发传输器)是一种广泛用于设备间串行通信的接口标准,尤其在嵌入式系统和FPGA(现场可编程门阵列)设计...通过这样的设计,我们可以创建一个高度定制化的、适应大容量数据传输需求的串口通信解决方案。

    ck.rar_ck_vhdl_串口 vhdl_串口通信 vhdl_接口 VHDL

    5. **同步与异步通信**:同步通信中,发送端和接收端使用相同的时钟,而异步通信则允许双方使用独立的时钟,通过起始和停止位来对齐数据。 6. **握手协议**:确保数据正确接收的机制,如UART中的RTS/CTS(请求发送/...

    基于历史梯度平均方差缩减的协同参数更新方法.docx

    总的来说,DisSAGD是一种创新的分布式机器学习优化策略,它结合了历史梯度信息和异步通信,为解决大规模分布式系统中的快速收敛和更新滞后问题提供了新的解决方案。这一方法有望在实际应用中提升模型训练的效率和...

    跨时钟yuchuli .pdf

    数据传输同步问题的解决方法中,简单的数据同步使用如DW_data_sync,而更复杂的数据流同步可能涉及到FIFO设计,比如双时钟域FIFO(DW_fifo_s2_sf),或者是双缓冲区FIFO(DW_fifo_2c_df)。 复位信号也可能会跨时钟...

    Accp5.0 S2项目实战3

    【Accp5.0 S2项目实战3】是北大青鸟职业教育机构推出的Accp软件工程师培训课程中的一个重要组成部分,主要聚焦于提升学员的实际动手能力和项目经验。Accp(北大青鸟Accp)是一套全面的、针对初学者的IT职业技能培训...

    操作系统进程管理

    - **生产者-消费者问题:** 描述了一个生产者不断地向缓冲区添加数据,而消费者不断地从中取出数据的情景,需要通过同步机制确保数据的一致性和完整性。 #### 五、进程通信 进程通信是指进程间的信息交换。它可以...

    lpc1111.rar_GT21L16S2Y.c_LPC1111 例程_lpc111_lpc1111_lpc1111f开发版

    接着,GT21L16S2Y是一个点阵字符型液晶显示模块,内部集成了16x2字符的字库,适用于显示文本信息。该模块通过SPI(Serial Peripheral Interface)接口与微控制器通信。SPI是一种同步串行接口,允许单主设备和多个从...

    s2_distributedsystem_

    分布式系统是现代信息技术领域中的重要概念,它涉及多个独立计算机节点通过网络进行协作,共同完成一个任务或提供服务。在“s2_distributedsystem_”这个主题中,我们可以推测这可能是分布式系统课程的第二课,重点...

Global site tag (gtag.js) - Google Analytics