锁定老帖子 主题:mina2+as3 的一点小感悟~
精华帖 (0) :: 良好帖 (0) :: 新手帖 (1) :: 隐藏帖 (1)
|
|
---|---|
作者 | 正文 |
发表时间:2011-07-09
最后修改:2011-07-09
结果悲催的在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关闭的问题~多谢 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2011-07-09
没人回复吧?
拜托技术贴要多点背景信息,又不是公司内部贴 |
|
返回顶楼 | |
发表时间: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 |
|
返回顶楼 | |
发表时间:2011-07-11
关于编码问题,如果两边确定是utf8格式,就肯定不会乱码问题,可能你传输过来的时候编码出了问题。。调试可以直接打十六进制出来对比下。
关不session 被关,信息拿不到的问题,对mina2的源码有点忘了,可以参考源码,我觉得肯定能看出问题的,另外如果真的不行,我觉得也可以用一个filter来做,在seesion被关的时候回调。当然这里也会存在filter里的信息清理问题。。 |
|
返回顶楼 | |
发表时间:2011-07-11
1、spring自带有字符过滤器,你在spring上配置就好。mina只需要在设置编码工厂时指定编码就行。关键你要搞清楚是flash过来的编码不对,还是mina转出的编码不对。
2、flash发过来的消息不带 /n或/r/n但你肯定要带上一个结尾标识吧(难道是/0F?)?否则你的解码器从何写起?所以有没有结尾并不是关键,关键是你要定制好解码协议,没有现存的协议,你可以自己定协议嘛。 回码结尾必须带/0这个我记得好像是跟字符类型的结尾有关,你可以在编码器里面自己加上。 3、请参考1. 4、没有背景,完全没看懂,不知道你要表达什么。 |
|
返回顶楼 | |
发表时间: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。 其它的,我想你根据这二句代码应该能推出来吧。 |
|
返回顶楼 | |
发表时间:2011-07-11
session.write 之后
session close了 服务端 根本就获取不到session.getLocalAddress()的值显示为 null mina只需要在设置编码工厂时指定编码就行 (这个地方我一直没找到哪里配置) 另外 自己写的filter 在decode的时候用utf-8没问题(GBK 英文会乱码~~) ecode的时候用(UTF-8 中文乱码 英文正常) 改用GBK编码再发 中英文都正常 flash用的是wirteUTF 和readUTF 方法 |
|
返回顶楼 | |
发表时间:2011-07-12
呵呵,上回与电信短信网关协议通信也是用mina2.0的,还有一回是与一个支付接口协议也是用mina2.0的,敢问你为何要关掉session呢?
|
|
返回顶楼 | |
发表时间:2011-07-12
esanone 写道 呵呵,上回与电信短信网关协议通信也是用mina2.0的,还有一回是与一个支付接口协议也是用mina2.0的,敢问你为何要关掉session呢?
不关session。。。 电信。。。 |
|
返回顶楼 | |
发表时间:2011-08-22
flash端用socket.writeBytes()
全部用二进制流的方式传输, 流的编码用大头的bigendia |
|
返回顶楼 | |