使用Mina2时,如何将IoSession存放到Memcached中

龙雪刚 发布于 2010/06/12 10:34
阅读 4K+
收藏 3

近期在使用Mina2,在网上看到一些贴子,提供一种思路是:在多台服务器应用时,对了让客户端连接对所有的服务器可见,可以把客户端连接保存在本地的同时,也保存一份放在Mem中,但是我在测试时发现,Mem无法存储IoSession.原因可能是IoSession属于对象,并且没有序列化。使用Mem进行存储对象时,前提是对象必须序列化,因为无法存储。请问:有没有什么方法可以使Mem存储IoSession?另外,有没有高人修改过Mina2源码,让IoSession本身已经序列化过?其次,如果Mem实在无法存储IoSession,那么该怎么样实现这种策略?奖分不多,请大家见谅。主要目的还是希望共同进步。谢谢。

加载中
0
红薯
红薯

怎么会想着把 IoSession 放到缓存里呢?

不允许这样做,就算 IoSession 序列化了,存进去 Memcached 后,拿出来也没用。

0
龙雪刚

其实做这样的考虑是基于我自己设想的一种思路:当客户端连接到来,服务器端开放一个连接口,(当然这也是一个服务器,这个服务器下面还有子节点,而且这些子节点才是真正做逻辑处理的)然后经过这个服务器根据实际情况(比如各个子节点逻辑服务器已经接受连接情况,各个子节点能承受的最大连接情况)进行分发到不同的子节点。各个子节点的结构是一样的。起到的效果也是一样的。每个子节点结构又是由一个子节点转发器和各个子节点逻辑处理器构成的。子节点转发器根据需要把消息转发到不同的子节点逻辑处理。那么,到这里把消息处理完毕后,把消息返回出去,就遇到了一个问题。是延原路返回,还是让当初客户端的连接对这里的每个子节点下面的逻辑处理器可见?如果能够可见,那么消息处理完毕后,就能直接返回给客户端,而不用延原路返回,再最后由连接口返回给客户端。不知道我有说明白没?呵呵。希望大家能够对我这个想法提出意见。

0
jakehuu
jakehuu

好复杂啊 关注中

0
JavaGG
JavaGG

iosession是对应用的,绑出socket的对应端口

如果你放到别的应用上,就没有用的了,因为在那个应用上根本没有分配最关的端口给这个session使用,socket没有建立起来

0
ryan_zhangyl
ryan_zhangyl

iosession不能序列化,所以不能保存到memcache中!

解决办法:

新建一个对象,对象包括服务器信息以及你需要共享的信息。然后memcache保存此序列化对象。

0
runus
runus

引用来自“龙雪刚”的答案

其实做这样的考虑是基于我自己设想的一种思路:当客户端连接到来,服务器端开放一个连接口,(当然这也是一个服务器,这个服务器下面还有子节点,而且这些子节点才是真正做逻辑处理的)然后经过这个服务器根据实际情况(比如各个子节点逻辑服务器已经接受连接情况,各个子节点能承受的最大连接情况)进行分发到不同的子节点。各个子节点的结构是一样的。起到的效果也是一样的。每个子节点结构又是由一个子节点转发器和各个子节点逻辑处理器构成的。子节点转发器根据需要把消息转发到不同的子节点逻辑处理。那么,到这里把消息处理完毕后,把消息返回出去,就遇到了一个问题。是延原路返回,还是让当初客户端的连接对这里的每个子节点下面的逻辑处理器可见?如果能够可见,那么消息处理完毕后,就能直接返回给客户端,而不用延原路返回,再最后由连接口返回给客户端。不知道我有说明白没?呵呵。希望大家能够对我这个想法提出意见。

你这个业务逻辑,我的SMG-PPG引擎就可以做到。
1)自实现Msession 代替memcache  支持分布式session cache
2)  ppg引擎设计之初就是分布式的
3)  ppg多个分节点 共享lib库 。因此自然支持迭代功能调用(没听说过?即 同一组核心库搭载各自不同的业务库jar +conf实现不同业务)
www.fuqit.net 可以找到ppg的功能介绍
有兴趣 可发邮件联系: runus@fuqit.net
返回顶部
顶部