一.需求 需要实现直播间的以下功能: 群发消息(文本.图片.推荐商品) 点对点私发消息(文本.图片.推荐商品) 单个用户禁言 全体用户禁言 撤回消息 聊天记录持久化 二.技术实现 服务端消息中心采用netty实现, 微站.小程序使用websocket与消息中心通信, 安卓端使用netty与消息中心通信. 服务器端每过一定时间会给客户端推送一条ping消息,客户端收到ping消息后回复pong消息,通过心跳验证存活客户端,定时断开未回复pong消息的链接,剔除服务端连接会话信息. 客户端因网络等问…
前言 上篇博文(netty实现消息中心(一)思路整理 )大概说了下netty websocket消息中心的设计思路,这篇文章主要说说简化版的netty聊天室代码实现,支持群聊和点对点聊天. 此demo主要说明netty实现消息推送的基本使用方法,如果需要扩充其它功能,可以基于此脚手架扩展. 完整项目代码地址:netty聊天室github源码 介绍 1.登录页面 2.聊天页面 核心代码: 启动netty服务,监听端口 private static void startNettyMsgServer(…
一 什么是有限状态机        FSM (finite-state machine),又称有限状态自动机,简称状态机,是表示有限个状态以及在这些状态之间的转移和动作等行为的数学模型.他对于逻辑以及时序的控制能起到非常重要的作用. 代码主要看的是什么?逻辑!所有的设计模式无非是让程序逻辑变得更加利与维护,利于优化,利于升级而已. 那么能不能把业务逻辑整理出来统一操作呢? 你可以理解状态机就是干这个的(当然不仅仅是这样).这样一来只要将一个业务看成一个状态机,有N中状态,然后统一来控制这些状态时…
我想用代码来打开android的消息中心,也叫做statusbar.通知栏.通知栏其实就是一个常驻的服务,至于原理这里就不多说了,简单说下思路和问题. 思路:API中没有实现的方法,那么就利用反射机制 问题:4.2系统中的方法变更 解决办法:分系统实现不同的方法 源码路径:……\sdk\sources\android-18\android\app\StatusBarManager 我们先来看android 4.4(API 19)中的方法,android 4.3(API 18),android 4…
一.背景 假设有一个系统的最大并发量有2000TPS左右.同时该系统有闲时和忙时,希望可以随时进行拓展和削减服务能力,以节省服务器费用开销. 该系统能提供站内消息.短信.app消息.邮箱的一个消息系统,并可实现通用化. 二.需求分析 1.该系统最大并发有2000TPS左右. 处理这么大并发,可以通过负载均衡.水平拓展机器数来暴力解决.但我们可以找寻一种可在业务层面进行水平扩展或缩容的架构. 2. 同时该系统有闲时和忙时,希望可以随时进行水平拓展和削减服务能力. 这个需求可以解读为需要对业务服务器…
微服务注册后,在注册中心的注册表结构是一个map: ConcurrentHashMap<String, Map<String, Lease<InstanceInfo>>> registry,假如一个order服务部署了三台机器,那么Map的第一个key为服务名称,第二个map的key是实例编号(instance-id), InstanceInfo该对象封装了服务的主要信息,例如ip 端口 服务名称 服务的编号等: 如图: 一.服务的注册 1.客户端源码(Discover…
在上一篇文章中<Android 基于Netty的消息推送方案之字符串的接收和发送(三)>我们介绍了Netty的字符串传递,我们知道了Netty的消息传递都是基于流,通过ChannelBuffer传递的,那么自然,Object也需要转换成ChannelBuffer来传递.好在Netty本身已经给我们写好了这样的转换工具.ObjectEncoder和ObjectDecoder,下面我们介绍一个案例. 1. 我们构造一个用来传输的对象(JavaBean) @SuppressWarnings(&quo…
在上一篇文章中<Android 基于Netty的消息推送方案之概念和工作原理(二)> ,我们介绍过一些关于Netty的概念和工作原理的内容,今天我们先来介绍一个叫做ChannelBuffer的东东. ChannelBuffer Netty中的消息传递,都必须以字节的形式,以ChannelBuffer为载体传递.简单的说,就是你想直接写个字符串过去,对不起,抛异常.虽然,Netty定义的writer的接口参数是Object的,这可能也是会给新上手的朋友容易造成误会的地方.Netty源码中,是这样…
上一篇文章中我讲述了关于消息推送的方案以及一个基于Netty实现的一个简单的Hello World,为了更好的理解Hello World中的代码,今天我来讲解一下关于Netty中一些概念和工作原理的内容,如果你觉得本篇文章有些枯燥,请先去阅读<Android 基于Netty的消息推送方案之Hello World(一)> ChannelEvent Netty是基于事件驱动的,就是我们上文提到的,发生什么事,就通知"有关部门".所以,不难理解,我们自己的业务代码中,一定有跟这些…
本文是按着ng2官网的高级内容“Deployment”的思路整理得出的,原文虽然在angular2的中文站下挂着,截止目前却还是英文版未翻译,笔者就在这里结合自己的理解给出原文的一点点整理.这是原文地址: https://angular.cn/docs/ts/latest/guide/deployment.html 1. 最简单的发布流程 最简单指的是开发完成好一个ng2应用后,做最少的事情让用户能在自己的浏览器内访问到此应用.从这句话出发就很容易想到,如何做到“最简单”,自然就是什么都不做,把…