新年10个Flag实现中~
访问量
272.8K
文章数
103
运行天
520
前言由于3月初七牛云的云存储的CDN回源流量开始收费,穷困的我准备放弃使用七牛云存储,只使用CDN(研究后发现七牛云的0.15/GB已经是业界很低的价格了,如果有条件还是可以支持的)。于是我在3月初重新配置了一次CDN,可这次配置导致了一个奇怪的现象,那就是无论我如何设置CDN,访问的cdn.bewindoweb.com的时候总是产生一个HTTP301永久跳转,跳转回了www.bewindoweb.com,再HTTP200下发数据:访问CDN就相当于只多了一层跳转,数据还是从网站服务器拿到的,完全没有CDN的作用……最近发现越来越卡,图片的流量挤爆了我的1M小水管,网站打开一直转圈圈,于是下定决心要弄好为止。一、查找表面原因百度了半天CDN跳转301回源站,出来的都是不相关的信息,所以我打算
前言一致性Hash是分布式架构最重要最基础的东西,这里以分布式图片缓存服务器为例进行讲述。原始问题:假设我们需要对一堆图片做缓存,缓存的图片放在了2台服务器上,当到来一个请求,应该如何知道请求的图片在哪台上面呢?暴力遍历就不要去想了,否则缓存就没有意义了。一个自然的想法就是根据图片的名字做一个映射(Hash),将图片名字映射到0,1两个数字上面,例如有这样的映射函数:f(图片名称)=md5(图片名称)%2md5是一个典型的哈希函数,会产生128bit的值,模2后只可能是0或1,那么我们就根据这个值把图片存入0、1两台服务器,当请求过来,根据图片名称计算出值,就可以知道图片缓存放在第几号服务器了:但假设现在我们图片太多了,需要再增加一台服务器分担压力,哈希函数必须更改成0、1、2映射,我们改为
一、.pkg文件格式.pkg是很多游戏的通用资源打包格式,在QQ的所有游戏都能够见到它的身影,像QQ三国、QQ堂之类。最近还在有小伙伴问我答题器是怎么做的。答题器就只是从数据库查找文本而已,数据就是从pkg文件里提取出来的。解析pkg文件需要知道它的原始格式,pkg文件格式如下:分为Header、Data、Meta三部分:Header:4字节固定标志,4字节文件数,4字节Meta位置偏移,4字节Meta长度Data:所有资源文件的压缩数据Meta:是一个列表,每个项包含文件名长度、文件名、固定识别标志、文件偏移、文件原始大小、文件压缩大小我们可以通过Meta偏移找到Meta列表开始的地方,遍历Meta列表,用文件偏移+文件压缩大小从Data区获取压缩数据,然后利用zlib进行解压就得到原始数
前言基于MqttWkv1.0.7。MqttWk没有构建内存中的订阅树,直接利用存储在Redis中的订阅信息来获取订阅者。订阅树算法分析主要的代码在cn.wizzer.iot.mqtt.server.store.subscribe.SubscribeStoreService:@OverridepublicList<SubscribeStore>search(Stringtopic){List<SubscribeStore>subscribeStores=newArrayList<SubscribeStore>();List<SubscribeStore>list=subscribeNotWildcardCache.all(topic);if(li
前言基于MqttWkv1.0.7。  一、BrokerHandlerchannelActive()@OverridepublicvoidchannelActive(ChannelHandlerContextctx)throwsException{super.channelActive(ctx);this.channelGroup.add(ctx.channel());this.channelIdMap.put(ctx.channel().id().asShortText(),ctx.channel().id());}当channel刚生效(客户端刚连接),将其channel信息存起来。Netty默认提供了channel管理,这里自己做channel管理是为了方便根据cha
前言基于MqttWkv1.0.7。BrokerServer是MqttWk从MainLaucher启动之后执行的第一个类。start()publicvoidstart()throwsException{LOGGER.info("Initializing{}MQTTBroker...","["+brokerProperties.getId()+"]");channelGroup=newDefaultChannelGroup(GlobalEventExecutor.INSTANCE);channelIdMap=newHashMap<>();bossGroup=brokerProperties.getUseEpoll()?newEpollEventLoopGroup():newNioEv
前言基于MqttWkv1.0.7。  MqttWk是我见过最清晰、代码量最少的Broker了,分析其源码有利于初步了解。一、代码结构分析1、整体架构mqtt-auth:验证权限方面的代码mqtt-broker:Broker核心代码mqtt-common:抽象出来的持久化接口mqtt-store:持久化接口的Redis、Kafka实现mqtt-zoo:简单测试代码2、mqtt-auth代码结构验证服务的实现,还有一些验证工具类3、mqtt-broker核心代码结构cluster:集群通信的实现,用的是Redis的发布订阅作消息总线codec:基于Websocket的MQTT通信需要特殊的编解码器,这里是为websocket写的编解码器config:Broker参数配置han
一、功能测试工具1、eclipse/paho.mqtt-spy【链接】github下载地址| mqtt-spy官方功能介绍  【简介】这是一个基于java做的GUI工具,需要jdk8+。界面一看就懂,建议连接的时候开启Details模式,这样功能会全一些:【功能介绍】1)连接、安全协议:mqtt3.1/3.1.1连接方式:IP+任意端口+TCP/Websocket+TLS(CA、TrustStore)1.1、1.2、1.3ClientID:可以帮助你自动生成随机IDCleanSession标志位连接超时、失败重连、失败重订阅、重连间隔KeepAlive设置Username、Password设置遗嘱设置:Topic、QoS、Retain、Data2)订阅和发布订阅
12345... 12下一页