mina项目寻求帮助? 400 报错
最近我在用JAVA做一个socket服务器程序,客户端是用C++编写的。客户端传入的是二进制字符(自己定义的报文)。
我的服务程序用了MINA,但自己对这个东西不是很了解,所以想请教一些问题。我用的是MINA 2.0 -M6版本。
1. MINA的IoHandlerAdapter是不是在程序中只能有一个类继承。
2.IoSession在mina中有没有一个池,用来存放所有的IoSession。
3.MINA中如何取得C++传过来的二进制码,自己实现一个类 implements ProtocolCodecFactory ?
我的报文字:(我这个报文这样定义有什么问题没有 ?)
定长14 bytes
0x81 | 被叫 | 主叫 | ALH | CHANNEL | WT | REG | M | N |
|
1 3 3 1 2 1 1 1 1
我要实现的程序大概是:
多客户端向 server端发送各式各样的请求及命令,server端收到请求以后,要去处理不同是事。比如:收到0x81解析内容然后,保存数据到数据库,收到0x82从数据库中取数据返回给客户端。
1:对的,一个adapter只可以有一个继承IoHandlerAdapter的类
2:有的,在NioProcessor类中的allSessions方法可以得到
3:你继承IoHandlerAdapter类,并实现messageReceived,当有数据传入这个session时,就会触发这个方法了,如果你不加任何filter时,参数message将是ByteBuffer类,你使用ByteBuffer类的读取方法即可
建议加上一个协议解释的filter
如:
先extends IoFilterAdapter
实现messageReceived方法
public final void messageReceived(NextFilter nextFilter, IoSession session,
Object message) {
if (eventTypes.contains(IoEventType.MESSAGE_RECEIVED)) {
IoBuffer buf = (IoBuffer) message;
Protocol p=new Protocol();
buf .get();//0x81
buf.get(new Byte[3]);被叫
//解释协议
nextFilter.messageReceived( session, p));
} else {
nextFilter.messageReceived(session, message);
}
}
这样,你继承IoHandlerAdapter的类 的messageReceived 的message将是Protocol 这个类
######eventTypes.contains()怎么会找不到这样的东西呢。这是一个什么包的内容?
######OO,这个判断你可以不管吧
######直接删了
######关于 IoFilterAdapter 是不是可以做成。有多少个报文字,就可以有多少个IoFilterAdapter,去生成对应的自己定义的报文包类。
对于Iobuffer的处理,比如:报文字数据错误,报文字不全等问题,做如何处理?
######这个还没有试过
应不行
因为他一个adapter对应一个端口的
报文解释一般都是分为协议头和协议体
协议头的报文件结构是一样的
如
长度 int
协议码 int
接下来就是协议体了 长度一般是协议头定义的那个长度
######1,默认情况下,allSessions只是工内部使用的iosessions池,外部(application)是用不到的。因为NioProcesser是由内部通Class loader 创建的,外部根本拿不到他的instance.如果非要使用内建的allSessions method,必需自己创建nioAcceptor的时候创建IoProcesser,但是对mina性能的影响绝对是致命的.
2,可以自己搞一个CurrentHashMap,当每个连接建立的时候put,关闭的时候remove,很好控制
3,数据包格式是自定义的格式,可以自己实现 ProtocolEncoder 和ProtocolDecoder接口。
4,对于处理多种结构的数据包可以使用一个ProtocolDecoder解决,就是捕获数据包类型后,在分别解包。可以参考red5 开源flash server,他支持很多数据包结构,只有一个ProtocolDecoder
######关于allSessions,我现在能想到的也是在建立时候,put IOsession 到MAP 里去。
关于多结构数据包,我感觉有点晕。还在进一步探索。我先去找下 red5 开源flash server看下。看能有什么帮助没有!
######red5 开源flash server项目太难搞了。都找不北。
######red5使用了非常多的第三方组件,比如什么jetty,quartz,ehcache,配置也比较复杂。
red5使用的是apache的 ivy管理项目的,项目搭建和maven搭建感觉插不多?
你只需要关心他的协议层,org.red5.server.net.rtmp.codec 中带mina的codec就行了
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。