文档章节

Netty长连接集群方案

p
 peter_shen
发布于 2016/04/19 12:32
字数 430
阅读 789
收藏 6

使用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
海淀
程序员
t-io关于心跳、集群等技术问题咨询

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

鸿鹄之志1984
03/21
0
0
许雪里/xxl-rpc

《分布式服务通讯框架XXL-RPC》 一、简介 1.1 概述 XXL-RPC是一个分布式服务通讯框架,提供稳定高性能的RPC远程服务调用功能。现已开放源代码,开箱即用。 1.2 特性 1、快速接入:接入步骤非...

许雪里
2015/11/13
0
0
CIM 2.1.0 发布,即时通讯方案

CIM 2.1.0 发布了,基于apache mina 的 java即时通讯服务端。与android 客户端完美结合,同时支持其他语言(ios,c,ActionScript,.net等)客户端的即时通信。 说明: 此开源版本为基础功能版本...

远方夕阳
2016/07/14
3K
6
Netty干货分享:京东京麦的生产级TCP网关技术实践总结

1、引言 京东的京麦商家后台2014年构建网关,从HTTP网关发展到TCP网关。在2016年重构完成基于Netty4.x+Protobuf3.x实现对接PC和App上下行通信的高可用、高性能、高稳定的TCP长连接网关。 早期...

JackJiang2011
2017/12/01
0
0
MqttWk 1.0.0-netty 发布,Java MQTT服务及消息代理

MqttWk by netty 基于 nutzboot + netty + redis + kafka 实现的MQTT服务broker(另有t-io版本分支,暂未发布) 本项目代码主要来源于 netty/iot-mqtt-server 等众多项目,开源免费,欢迎交流...

Wizzer
07/31
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

JS:异步 - 面试惨案

为什么会写这篇文章,很明显不符合我的性格的东西,原因是前段时间参与了一个面试,对于很多程序员来说,面试时候多么的鸦雀无声,事后心里就有多么的千军万马。去掉最开始毕业干了一年的Jav...

xmqywx
今天
0
0
Win10 64位系统,PHP 扩展 curl插件

执行:1. 拷贝php安装目录下,libeay32.dll、ssleay32.dll 、 libssh2.dll 到 C:\windows\system32 目录。2. 拷贝php/ext目录下, php_curl.dll 到 C:\windows\system32 目录; 3. p...

放飞E梦想O
今天
0
0
谈谈神秘的ES6——(五)解构赋值【对象篇】

上一节课我们了解了有关数组的解构赋值相关内容,这节课,我们接着,来讲讲对象的解构赋值。 解构不仅可以用于数组,还可以用于对象。 let { foo, bar } = { foo: "aaa", bar: "bbb" };fo...

JandenMa
今天
1
0
OSChina 周一乱弹 —— 有人要给本汪介绍妹子啦

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @莱布妮子 :分享水木年华的单曲《中学时代》@小小编辑 手机党少年们想听歌,请使劲儿戳(这里) @须臾时光:夏天还在做最后的挣扎,但是晚上...

小小编辑
今天
21
5
centos7安装redis及开机启动

配置编译环境: sudo yum install gcc-c++ 下载源码: wget http://download.redis.io/releases/redis-3.2.8.tar.gz 解压源码: tar -zxvf redis-3.2.8.tar.gz 进入到解压目录: cd redis-3......

hotsmile
今天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部