论坛首页 Java企业应用论坛

mina2+as3 的一点小感悟~

浏览 8260 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (1) :: 隐藏帖 (1)
作者 正文
   发表时间:2011-07-09   最后修改:2011-07-09
原系统用1.17 开始接触mina框架之后就把系统改为2.0~~~

结果悲催的在filter上面被放倒了

1、我没有找到mina2在spring配置中如何设置编码格式,然后自己实现一个filter

2、客户端为flash 编码格式为utf-8 ,用自带的那个filter一直收不到消息。原来他只认/n或者/r/n flash的安全沙箱自动发过来的信息是不带这些的。而且回写的时候又要带上/0。

3、即便是自己写设置utf-8调用iobuffer 的writeString 或者是自己转码之后write 你终会发现接收到得是中文乱码。
实在是无法理解转成utf-8或者用iobuffer的方法皆无法处理中文乱码。最后实在是无奈试了下GBK格式才成功

4、当在tomacat向mina的服务端发socket的时候session关闭是一个问题。如果不关session通信会停留在自然close阶段
如果立即关 服务端的receive方法却得不到iosession,虽然session被关闭了 好歹请求的ip和端口之类的信息给我保留下来吧。
session为空之后就无法判断请求到底是从tomcat端发送过来的还是从flash发过来的,也无法做安全验证/过滤。我只想到了用比较missage的方法来区分哪边是tomcat的请求 哪边是flash的请求


上面除了第一个2、3、4在1.17版本中都正常运作,filter失效看过源码之后发现不是filter问题,因为1.17和2.0的filter是一样的,session的close问题 也实在是无法理解。google大神也帮不了我。希望有经验的人能帮我看下 第四个session关闭的问题~多谢
   发表时间:2011-07-09  
没人回复吧?
拜托技术贴要多点背景信息,又不是公司内部贴
0 请登录后投票
   发表时间:2011-07-09  
tedeyang 写道
没人回复吧?
拜托技术贴要多点背景信息,又不是公司内部贴



背景信息就这么多啊。。。

还有今天出现了一个异常:mina java.nio.charset.UnmappableCharacterException: Input length = 1

好像是数据非完整应用层包 但是不知道怎么处理

http://topic.csdn.net/u/20100310/17/4cf1c1a5-b01c-4774-a803-81ee245ae0eb.html
0 请登录后投票
   发表时间:2011-07-11  
关于编码问题,如果两边确定是utf8格式,就肯定不会乱码问题,可能你传输过来的时候编码出了问题。。调试可以直接打十六进制出来对比下。
关不session 被关,信息拿不到的问题,对mina2的源码有点忘了,可以参考源码,我觉得肯定能看出问题的,另外如果真的不行,我觉得也可以用一个filter来做,在seesion被关的时候回调。当然这里也会存在filter里的信息清理问题。。
0 请登录后投票
   发表时间:2011-07-11  
1、spring自带有字符过滤器,你在spring上配置就好。mina只需要在设置编码工厂时指定编码就行。关键你要搞清楚是flash过来的编码不对,还是mina转出的编码不对。

2、flash发过来的消息不带 /n或/r/n但你肯定要带上一个结尾标识吧(难道是/0F?)?否则你的解码器从何写起?所以有没有结尾并不是关键,关键是你要定制好解码协议,没有现存的协议,你可以自己定协议嘛。 回码结尾必须带/0这个我记得好像是跟字符类型的结尾有关,你可以在编码器里面自己加上。

3、请参考1.

4、没有背景,完全没看懂,不知道你要表达什么。
0 请登录后投票
   发表时间:2011-07-11  
补充:
又看了一下你的第4点。要区分是哪边的请求,应该不难,你得先确定二点。
1、二者是否在同一服务器。
如果不在同一服务器。你根据IP就可以确定了吧??
2、你的flash是flex还是web端的应用程序?难道不是从80端口出来的么?给你一段代码你参考一下。
int port=((InetSocketAddress)session.getLocalAddress()).getPort(); 得到本地连接端口

String ip=((InetSocketAddress)session.getRemoteAddress()).getAddress().getHostAddress();//得到远程连接IP。

其它的,我想你根据这二句代码应该能推出来吧。
0 请登录后投票
   发表时间:2011-07-11  
session.write 之后
session close了 服务端 根本就获取不到session.getLocalAddress()的值显示为 null


mina只需要在设置编码工厂时指定编码就行 (这个地方我一直没找到哪里配置)

另外 自己写的filter 在decode的时候用utf-8没问题(GBK 英文会乱码~~)
ecode的时候用(UTF-8 中文乱码 英文正常) 改用GBK编码再发 中英文都正常

flash用的是wirteUTF 和readUTF 方法
0 请登录后投票
   发表时间:2011-07-12  
呵呵,上回与电信短信网关协议通信也是用mina2.0的,还有一回是与一个支付接口协议也是用mina2.0的,敢问你为何要关掉session呢?
0 请登录后投票
   发表时间:2011-07-12  
esanone 写道
呵呵,上回与电信短信网关协议通信也是用mina2.0的,还有一回是与一个支付接口协议也是用mina2.0的,敢问你为何要关掉session呢?


不关session。。。 电信。。。
0 请登录后投票
   发表时间:2011-08-22  
flash端用socket.writeBytes()


全部用二进制流的方式传输,

流的编码用大头的bigendia
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics