曾经有这样一个需求,来自公网(互联网)上的前端请求发送到内网系统A,内网系统A需要通过一个渠道系统处理,渠道系统处理之后,将结果反馈给内网系统A,内网系统A处理之后再反馈给客户端,客户端然后在通过一定的途径发送请求到第三方系统。
一:设计思想
这个系统作为多个外部业务系统的一个渠道;对外围系统提供统一的通讯服务,同时由于各种历史原因,它需要和安装互联网上各个地方的客户端进行连接服务。也就是说对于业务系统,它是一个底层的通讯服务系统,对于各个客户端来说,它又是一个上层的服务应用。
那么整个数据的流转如下:
图一
上图中客户端是发布在互联网的,而业务系统和渠道服务系统是发布在内网,属于内部通讯。
二:多个SERVER的通讯处理
方式一:
大家知道MINA2的通讯机制,是采用责任链的设计模式,在服务启动的时候,将日志,业务处理,线程等增加进去,在所有的报文过来的时候都会按照链式的结构一个节点一个节点的去处理:
如下图是SERVER端的一个处理流程,本系统将会启动两个SOCKET SERVER,这两个SERVER分别处理来自业务系统的请求和处理来自客户端的请求。
图二
如上图所示,所有的客户端和服务端的交换都需要经过上述转换,如日志,编码/解码,加密/解密等。所有的数据交换均采用XML报文的格式。
由于TCP/IP传输的时候,无法确定报文的边界,那么在报文的头上面需要加入固定格式的长度。如果你设置成1,2,4,那么就很方便了,在MINA2中有提供现成的方法判断报文。
如图一所示,系统中两个通讯服务端需要进行通信,特别是由业务系统发过来经过渠道系统的业务模块处理之后需要发送给另外一个SOCKET服务,那么这个时候如何处理?
在MINA2中两个SOCKET SERVER进行通讯,可以采用虚拟机内部的管道的方式。在MINA2的源码包里面自带了这个例子:
IoAcceptor acceptor = new VmPipeAcceptor();
VmPipeAddress address = new VmPipeAddress(8080);
// Set up server
acceptor.setHandler(new TennisPlayer());
acceptor.bind(address);
// Connect to the server.
VmPipeConnector connector = new VmPipeConnector();
connector.setHandler(new TennisPlayer());
ConnectFuture future = connector.connect(address);
future.awaitUninterruptibly();
IoSession session = future.getSession();
// Send the first ping message
session.write(new TennisBall(10));
// Wait until the match ends.
session.getCloseFuture().awaitUninterruptibly();
acceptor.unbind();
方式二:也可以将IoSession对方放入全局的线程安全的Map中去,当需要发送的时候根据KEY取出来,然后write出去。
当你发现在两个socket server A 需要等待 socket server B的执行结果然后,将结果处理完之后返回给前端系统,可以采用JDK1.5的EXCHANGE类。
三:系统难点
该渠道系统要保持成千上万个客户端的长连接,因为如果客户端如果不保持长连接,渠道系统将无法知道客户端的IP,因为客户端是按照在企业内部局域网。如果不知道客户端的信息,那么渠道服务系统也就无法推送信息给客户端了,这点类似于我们常用的QQ,旺旺的方式。一旦登陆上去就保持长连接。
四:系统优化
1.将系统中所有的基础数据,类似于城市这样的数据进行缓存,增加访问速度。
2.当第三方系统有结果返回给渠道系统时,将结果消息放入通知系统。然后启动定时任务,也就是一个轮训线程,定时将通知结果返回给各个业务系统。减少网络的调用。
- 大小: 49 KB
- 大小: 31.3 KB
分享到:
相关推荐
在"Mina开发实例"中,项目使用了Maven构建系统。Maven帮助开发者管理依赖,使得引入和更新Mina库以及其他相关库变得简单。在`pom.xml`文件中,可以看到对Mina库的依赖声明,以及项目的构建配置。 为了实现长连接...
在本“mina即时聊天demo”中,我们可以通过学习如何利用Mina来构建一个简单的即时聊天系统,了解其核心机制和工作原理。 1. **Mina框架基础** Mina的核心在于它的I/O处理模型,即NIO(Non-blocking I/O)。NIO允许...
XMPP(Extensible Messaging and Presence Protocol)是一种基于XML的实时通信协议,广泛应用于即时通讯、VoIP、协作软件等场景。它提供了丰富的扩展机制,允许开发者添加自定义功能。而MINA(Multipurpose ...
在`pom.xml`文件中,添加Mina和Spring Boot的相关依赖: ```xml <groupId>org.springframework.boot <artifactId>spring-boot-starter-web <groupId>org.apache.mina <artifactId>mina-core <version>...
Socket和Mina是Java网络编程中的两个重要工具,它们在构建高性能、高并发的网络应用中发挥着关键作用。Socket是TCP/IP通信的基础,而Mina是一个高效的网络应用框架,它简化了网络编程的复杂性。 Socket,也被称为套...
Mina网络通信传输是基于Java开发的一个高性能、可伸缩的网络应用框架,常用于构建服务器和客户端之间的通信系统,尤其适用于即时聊天应用。Mina提供了丰富的API和工具,简化了网络编程的复杂性,使得开发者可以专注...
Java具有广泛的社区支持和丰富的第三方库,如Apache MINA、Netty等,这些库可以用于实现网络通信和数据传输,是构建即时通讯系统的基础。此外,Java的多线程特性使得处理并发连接和消息传递变得更为简单,而其面向...
**Android MiNa 通讯实现** MiNa(Mini NIO Asynchronous)是Apache软件基金会的一个开源项目,它提供了一个网络通信框架,适用于Java平台。在Android应用中,MiNa可以用于构建高性能、异步的网络应用,例如聊天...
mina是一个开源的、基于Java NIO的网络通信框架,它为构建高性能、高可靠性的网络应用提供了强大的工具。在Android开发中,mina库可以用于实现高效的服务器与客户端之间的数据传输,尤其适用于需要进行大量网络交互...
随着Android系统的普及和发展,即时通讯已经成为移动应用不可或缺的一部分,它不仅局限于文字交流,还可以支持图片和其他多媒体内容的传输,为用户提供丰富的交互体验。 **1. 安卓即时通讯的历史背景** Android是...
3. **协议设计**:即时通讯系统通常基于特定的通信协议,如XMPP(Extensible Messaging and Presence Protocol)或自定义的简单协议。开发者需要理解这些协议的工作原理,并在Java代码中实现解析和封装协议消息。 4...
在IT行业中,XMPP(Extensible Messaging and Presence Protocol)是一种基于XML的实时通讯协议,广泛应用于即时消息和在线状态管理。本项目“JAVA实现XMPP客户端和服务器”着重于使用Java语言来构建XMPP系统的...
Java远程通讯技术是构建分布式系统的关键,涉及到多种技术如RMI、MINA、ESB、Burlap、Hessian、SOAP、EJB和JMS等。这些技术在不同的场景下有着各自的优势和适用范围,理解它们的工作原理对于优化系统性能至关重要。 ...
Java远程通讯技术是构建分布式系统的关键,涉及到多种协议和实现方式。本文主要探讨了Java领域中常见的几种远程通讯技术,包括RMI、MINA、ESB、Burlap、Hessian、SOAP、EJB和JMS等。这些技术各有特点,适用于不同的...
XMPP是一种基于XML的开放标准,常用于实现聊天、状态更新和实时通信。 **XMPP协议介绍** XMPP最初设计用于即时消息传递,但其灵活性使其可以扩展到其他领域,如语音和视频聊天、文件传输、群组聊天等。该协议的核心...
SOAP是另一种基于XML的远程调用协议,它不仅包含了方法调用的细节,还包含了错误处理和安全策略等更复杂的元数据,因此常用于Web服务。SOAP消息通常通过HTTP或HTTPS传输,具有更高的标准化和安全性。 EJB是Java EE...
XMPP(Extensible Messaging and Presence Protocol)是一种基于XML的即时通讯协议,广泛应用于聊天、协作和物联网等场景。本文将深入探讨XMPP服务器的性能分析和优化,特别关注两个常用的XMPP服务器——Openfire和...
XMPP协议的开放性质意味着企业可以构建自己的即时通讯系统,提高工作效率,或者在游戏中集成功能如聊天和团队语音交流。XMPP协议本身是协议规范,需要通过实现来具体应用,Smack库就是XMPP协议在Java语言中的一种...
XMPP是一种基于XML的实时通讯协议,它允许用户发送和接收结构化的消息,同时提供了扩展性,使得开发者能够构建更加复杂的通信应用。与常见的商业IM软件如QQ、MSN Messenger不同,Gtalk是基于XMPP协议的实例。 ...
该框架支持iOS、Android和标准Java平台,服务端采用Mina和Netty构建,包含1283个文件,其中HTML文件560个,Java文件113个,JAR文件97个,C头文件97个,其他类型文件包括svn-base、png、class、m、txt、xml等。