Mina开发领悟
程序员文章站
2022-06-30 09:16:30
...
使用Mina作为通信层框架是不错的选择.
1. 使用长连接,不需要每一次通信都要重新建立连接,这样速度更快.
2. java对象序列化传输,不需要进行转化,使用方便.
3. Mina集成Spring后,可以像一般的接口方法调用,对于模块化集成很方便,管理也很清晰.
一个大项目进行模块化拆分后,代码结构清晰,维护方便,模块间通过接口调用.
服务端开放接口服务,通过接口的JDK代理的反射机制调用该服务的实现类,并得到返回值,返回给调用方,通过hsf-service返回到客户端.
[服务端采用mina的事件驱动机制,多线程非阻塞,提供高性能服务]
客户端通过接口调用接口方法,根据路由规则找到目标机器,建立连接,如果有很多台机器,各业务方都是不同的机器,那么可以根据ip:port建立连接缓存.第一次连接的时候,建立连接池(比如5个池对象),每一次使用的时候获取一个,用完放回去.此连接作为复用,不关闭。
Mina建立长连接的服务调用是不错的选择,不过使用长连接,连接的复用很重要,否则性能全在建立和断开连接上了.
以下是例子:
服务配置
客户端配置
以上是具体的实现思路
1. 使用长连接,不需要每一次通信都要重新建立连接,这样速度更快.
2. java对象序列化传输,不需要进行转化,使用方便.
3. Mina集成Spring后,可以像一般的接口方法调用,对于模块化集成很方便,管理也很清晰.
一个大项目进行模块化拆分后,代码结构清晰,维护方便,模块间通过接口调用.
服务端开放接口服务,通过接口的JDK代理的反射机制调用该服务的实现类,并得到返回值,返回给调用方,通过hsf-service返回到客户端.
[服务端采用mina的事件驱动机制,多线程非阻塞,提供高性能服务]
客户端通过接口调用接口方法,根据路由规则找到目标机器,建立连接,如果有很多台机器,各业务方都是不同的机器,那么可以根据ip:port建立连接缓存.第一次连接的时候,建立连接池(比如5个池对象),每一次使用的时候获取一个,用完放回去.此连接作为复用,不关闭。
Mina建立长连接的服务调用是不错的选择,不过使用长连接,连接的复用很重要,否则性能全在建立和断开连接上了.
以下是例子:
服务配置
<beans default-autowire="byName"> <bean id="exp" class="test.org.frame.hsf.usecase.ExpImpl"/> <bean id="expService" class="org.frame.hsf.service.ProviderService" init-method="init"> <property name="serviceInterface"> <value>test.org.frame.hsf.usecase.Exp</value> </property> <property name="target"> <ref bean="exp" /> </property> </bean> </beans>
客户端配置
<beans default-autowire="byName"> <bean id="exp" class="org.frame.hsf.service.ClientService" init-method="init" singleton="true"> <property name="serviceInterface"> <value>test.org.frame.hsf.usecase.Exp</value> </property> <property name="target"> <value>localhost:8901</value> </property> </bean> </beans>
以上是具体的实现思路