文档章节

Netty长连接集群方案

p
 peter_shen
发布于 2016/04/19 12:32
字数 430
阅读 6.7K
收藏 7

#程序员薪资揭榜#你做程序员几年了?月薪多少?发量还在么?>>>

使用Netty自定义协议连接APP和物联网设备,业务增大之后,势必需要使用集群方案,Netty的Channel并没有实现序列化接口,所以不能将Channel存储在redis或者Memecached中。我想了一个根据自定义session,利用redis实现的集群方案,记录一下。

1. 对于长连接的处理

自定义session,session中持有ChannelId(Netty 4.1)并产生sessionId,将session保存在redis中,并在redis中维护ChannelId和sessionId的关系,登录之后的操作都带有sessionId,根据sessionId可以查询到ChannelId,然后根据ChannelId可以通过ChannelGroup.find(ChannelId)获取到Channel对象。

2. 对于消息的处理

APP和IOT设备通过长连接,通过保持连接的那台服务器,将消息pub到redis集群中,而所有集群中的服务器都sub这个redis集群,一旦有消息,所有的服务器都会处理这些消息,通过消息中的sessionId从redis集群中获取到ChannelId, 因为Netty 4.1的channel是全局唯一的,然后根据ChannelId去查询本机是否存在对应这个Channel,如果存在的话,则说明该服务器持有对应的Channel,然后通过该Channel将消息发送给指定的APP或者IOT设备。

下一步要考虑如何通过Nginx做负载均衡,将长连接均匀的分布到Netty集群中

Nginx 1.9 已经支持TCP代理和负载均衡,并可以通过一致性哈希算法将连接均匀的分配到所有的服务器上

    upstream cloudsocket {

        hash $remote_addr consistent;

        server 10.0.0.88:9998 weight=5 max_fails=3 fail_timeout=30s;

        server 10.0.0.88:9999 weight=5 max_fails=3 fail_timeout=30s; 

    }

© 著作权归作者所有

p
粉丝 0
博文 1
码字总数 430
作品 0
海淀
程序员
私信 提问
加载中

评论(0)

Netty Redis 亿级流量 高并发 实战 (长文 修正版)

疯狂创客圈,一个Java 高并发研习社群 【博客园 总入口 】 疯狂创客圈,倾力推出: 《Netty Zookeeper Redis 高并发实战》一书, 面试必备 + 面试必备 + 面试必备 写在前面 大家好,我是作者...

osc_jrtl615f
2019/01/10
20
0
XXL-RPC v1.3.2,分布式服务框架

Release Notes 1、泛化调用:服务调用方不依赖服务方提供的API; 2、新增通讯方案 "NETTY_HTTP"; 3、新增序列化方案 "KRYO"; 4、通讯效率优化:TCP连接池取消,改为单一长连接,移除commo...

许雪里
2019/02/22
1.2K
16
京东到家基于netty与websocket的实践

背景 在京东到家商家中心系统中,商家提出在 Web 端实现自动打印的需求,不需要人工盯守点击打印,直接打印小票,以节约人工成本。 解决思路 关于问题的思考逻辑: 第一种:想到的是可以用a...

架构师springboot
2019/04/22
126
0
t-io关于心跳、集群等技术问题咨询

1.看了下helloworld那个demo,client端有组特定心跳包的代码,但server端就一行关于心跳的代码, serverGroupContext.setHeartbeatTimeout(org.tio.examples.helloworld.common.Const.TIMEOU...

鸿鹄之志1984
2018/03/21
1.6K
3
lcn 分布式事务协调者集群原理

lcn集群原理图: 1.实现原理: 1.1 LCN获取tm协调者注册地址 1. LCN客户端项目启动的时候,首先会注册到事务协调者中去,然后读取配置文件tm事务协调者的注册地址。 2. 向该事务协调者注册地...

osc_rx2gh7b8
2019/04/14
5
0

没有更多内容

加载失败,请刷新页面

加载更多

微服务项目搭建,到底要不要聚合工程?

这是一个入门问题,做微服务项目,首先就是要搭建 Project,代码采用什么样的形式来组织,这是我们面临的第一个问题。 要扯清楚这个问题,首先对 Maven 的使用不能含糊,小伙伴们可以在公众号...

osc_y12wmf09
15分钟前
15
0
C语言探索之旅 | 第一部分第六课:变量的世界(三),显示变量内容

作者 谢恩铭,慕课网精英讲师 Oscar老师。 转载请注明出处。 内容简介 用 printf 显示变量内容 用 scanf 提取程序中的输入 总结 第一部分第七课预告 1. 用 printf 显示变量内容 变量相关的内...

osc_zjs1puzi
17分钟前
14
0
php 操作RabbitMQ

基本流程图 如果exchange 没有绑定queue,则消息将会被丢弃 如果创建exchange,queue,并且已经绑定了,则可以直接使用 为了防止脚本出问题 可以配合supervisor 安装 从网站 https://packag...

php开源社区
18分钟前
18
0
Kotlin Coroutines Flow 系列(五) 其他的操作符

八. Flow 其他的操作符 8.1 Transform operators transform 在使用 transform 操作符时,可以任意多次调用 emit ,这是 transform 跟 map 最大的区别: fun main() = runBlocking { (1...

osc_0l1onu3j
18分钟前
13
0
挽救数据库性能的30条黄金法则

原文: 挽救数据库性能的30条黄金法则 1. 优化查询,应尽量避免全表扫描,应该在用于检索数据和排序数据的字段上建立索引,如where子句用于搜索,order by子句用于排序,所以在这两个子句涉及...

osc_gxvh47u5
19分钟前
16
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部