使用Mina2时,如何将IoSession存放到Memcached中
近期在使用Mina2,在网上看到一些贴子,提供一种思路是:在多台服务器应用时,对了让客户端连接对所有的服务器可见,可以把客户端连接保存在本地的同时,也保存一份放在Mem中,但是我在测试时发现,Mem无法存储IoSession.原因可能是IoSession属于对象,并且没有序列化。使用Mem进行存储对象时,前提是对象必须序列化,因为无法存储。请问:有没有什么方法可以使Mem存储IoSession?另外,有没有高人修改过Mina2源码,让IoSession本身已经序列化过?其次,如果Mem实在无法存储IoSession,那么该怎么样实现这种策略?奖分不多,请大家见谅。主要目的还是希望共同进步。谢谢。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(7)
其实做这样的考虑是基于我自己设想的一种思路:当客户端连接到来,服务器端开放一个连接口,(当然这也是一个服务器,这个服务器下面还有子节点,而且这些子节点才是真正做逻辑处理的)然后经过这个服务器根据实际情况(比如各个子节点逻辑服务器已经接受连接情况,各个子节点能承受的最大连接情况)进行分发到不同的子节点。各个子节点的结构是一样的。起到的效果也是一样的。每个子节点结构又是由一个子节点转发器和各个子节点逻辑处理器构成的。子节点转发器根据需要把消息转发到不同的子节点逻辑处理。那么,到这里把消息处理完毕后,把消息返回出去,就遇到了一个问题。是延原路返回,还是让当初客户端的连接对这里的每个子节点下面的逻辑处理器可见?如果能够可见,那么消息处理完毕后,就能直接返回给客户端,而不用延原路返回,再最后由连接口返回给客户端。不知道我有说明白没?呵呵。希望大家能够对我这个想法提出意见。
cads
iosession不能序列化,所以不能保存到memcache中!
解决办法:
新建一个对象,对象包括服务器信息以及你需要共享的信息。然后memcache保存此序列化对象。
iosession是对应用的,绑出socket的对应端口
如果你放到别的应用上,就没有用的了,因为在那个应用上根本没有分配最关的端口给这个session使用,socket没有建立起来
好复杂啊 关注中
其实做这样的考虑是基于我自己设想的一种思路:当客户端连接到来,服务器端开放一个连接口,(当然这也是一个服务器,这个服务器下面还有子节点,而且这些子节点才是真正做逻辑处理的)然后经过这个服务器根据实际情况(比如各个子节点逻辑服务器已经接受连接情况,各个子节点能承受的最大连接情况)进行分发到不同的子节点。各个子节点的结构是一样的。起到的效果也是一样的。每个子节点结构又是由一个子节点转发器和各个子节点逻辑处理器构成的。子节点转发器根据需要把消息转发到不同的子节点逻辑处理。那么,到这里把消息处理完毕后,把消息返回出去,就遇到了一个问题。是延原路返回,还是让当初客户端的连接对这里的每个子节点下面的逻辑处理器可见?如果能够可见,那么消息处理完毕后,就能直接返回给客户端,而不用延原路返回,再最后由连接口返回给客户端。不知道我有说明白没?呵呵。希望大家能够对我这个想法提出意见。
怎么会想着把 IoSession 放到缓存里呢?
不允许这样做,就算 IoSession 序列化了,存进去 Memcached 后,拿出来也没用。