文档章节

Netty长连接集群方案

p
 peter_shen
发布于 2016/04/19 12:32
字数 430
阅读 682
收藏 6
点赞 1
评论 0

使用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

CIM 2.1.0 发布,即时通讯方案

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

远方夕阳 ⋅ 2016/07/14 ⋅ 6

许雪里/xxl-rpc

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

许雪里 ⋅ 2015/11/13 ⋅ 0

Netty干货分享:京东京麦的生产级TCP网关技术实践总结

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

JackJiang2011 ⋅ 2017/12/01 ⋅ 0

MQTT---HiveMQ源码详解(一)概览

源博客地址:http://blog.csdn.net/pipinet123 MQTT交流群:221405150 面向群体 想自己实现MQTT Broker的朋友 对现有开源的MQTT Broker或多或少有些不满意的朋友 简单介绍 HiveMQ是企业级MQTT ...

pipinet123 ⋅ 2017/03/07 ⋅ 0

http服务使用netty客户端的意义在哪里?

最近我们的一个项目由长连接改为短连接,之前用的是netty,因为netty对http也支持,所以继续使用netty作为http服务器,http为短连接,在客户端收到回应后会主动断开连接,用netty自己的客户端...

cook702 ⋅ 2015/07/20 ⋅ 0

需要做一个基于手机的CS版的聊天室,请问后台服务端用什么框架比较合适。请大家给点主意。

需要做一个基于手机的CS版的聊天室,请问后台服务端用什么方案或者框架比较合适。请大家给点主意。? 服务端需要考虑消息队列,长连接,xmpp协议等。有没有合适的框架或者方案。 目前困扰是:...

明舞 ⋅ 2014/12/09 ⋅ 2

简单谈谈服务间的连接

最近又把RPC框架的底层协议翻出来回顾了一遍,梳理一下有什么可以学习和借鉴的地方,重点看了一下RPC连接的实现方案。看了之后,觉得可以谈谈服务间连接的方式及区别,所以按照自己的理解写了...

谢东升Forest ⋅ 2017/07/18 ⋅ 0

怎么使用netty写一个http长连接服务器

看过netty自带的example和http://my.oschina.net/javagg/blog/8891,这些都是普通的http短连接的例子,我自己试着写了http长连接的例子,但是发现1个长连接需要占用1个netty的worker线程,忘...

weekend ⋅ 2011/06/10 ⋅ 11

深入浅出微服务框架dubbo(一):基础篇

一、基础篇 1.1 开篇说明 dubbo是一个分布式服务框架,致力于提供高性能透明化RPC远程调用方案,提供SOA服务治理解决方案。本文旨在将对dubbo的使用和学习总结起来,深入源码探究原理,以备今...

格_鲁 ⋅ 01/08 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

mysql in action / alter table

change character set ALTER SCHEMA `employees` DEFAULT CHARACTER SET utf8mb4 DEFAULT COLLATE utf8mb4_general_ci ;ALTER TABLE `employees`.`t2` CHARACTER SET = utf8mb4 , COLLAT......

qwfys ⋅ 今天 ⋅ 0

Java 开发者不容错过的 12 种高效工具

Java 开发者常常都会想办法如何更快地编写 Java 代码,让编程变得更加轻松。目前,市面上涌现出越来越多的高效编程工具。所以,以下总结了一系列工具列表,其中包含了大多数开发人员已经使用...

jason_kiss ⋅ 昨天 ⋅ 0

Linux下php访问远程ms sqlserver

1、安装freetds(略,安装在/opt/local/freetds 下) 2、cd /path/to/php-5.6.36/ 进入PHP源码目录 3、cd ext/mssql进入MSSQL模块源码目录 4、/opt/php/bin/phpize生成编译配置文件 5、 . ./...

wangxuwei ⋅ 昨天 ⋅ 0

如何成为技术专家

文章来源于 -- 时间的朋友 拥有良好的心态。首先要有空杯心态,用欣赏的眼光发现并学习别人的长处,包括但不限于工具的使用,工作方法,解决问题以及规划未来的能力等。向别人学习的同时要注...

长安一梦 ⋅ 昨天 ⋅ 0

Linux vmstat命令实战详解

vmstat命令是最常见的Linux/Unix监控工具,可以展现给定时间间隔的服务器的状态值,包括服务器的CPU使用率,内存使用,虚拟内存交换情况,IO读写情况。这个命令是我查看Linux/Unix最喜爱的命令...

刘祖鹏 ⋅ 昨天 ⋅ 0

MySQL

查看表相关命令 - 查看表结构    desc 表名- 查看生成表的SQL    show create table 表名- 查看索引    show index from  表名 使用索引和不使用索引 由于索引是专门用于加...

stars永恒 ⋅ 昨天 ⋅ 0

easyui学习笔记

EasyUI常用控件禁用方法 combobox $("#id").combobox({ disabled: true }); ----- $("#id").combobox({ disabled: false}); validatebox $("#id").attr("readonly", true); ----- $("#id").r......

miaojiangmin ⋅ 昨天 ⋅ 0

金山WPS发布了Linux WPS Office

导读 近日,金山WPS发布了Linux WPS Office中文社区版新版本,支持大部分主流Linux系统,功能更加完善,兼容性、稳定性大幅度提升。本次更新WPS将首次在Linux提供专业办公文件云存储服务,实...

问题终结者 ⋅ 昨天 ⋅ 0

springboot2输出metrics到influxdb

序 本文主要研究一下如何将springboot2的metrics输出到influxdb maven <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-bo......

go4it ⋅ 昨天 ⋅ 0

微信小程序 - 选择图片显示操作菜单

之前我分享过选择图片这个文章,但是我在实际开发测试使用中发现一个问题在使用 wx.chooseImage 选择照片显示出第一格是拍照,后面是相册里的图片。这种实现之前说过了,效果如下。 但是你从...

hello_hp ⋅ 昨天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部