这篇文章会对twemproxyRedis协议解析代码部分进行一番简单的分析,同时给出twemproxy目前支持的所有Redis命令.在这篇文章开始前,我想大家去简单地理解一下有限状态机,当然不理解也是没有问题的,有限状态机仅仅能帮助我们更好地理解twemproxyRedis协议解析代码部分. redis 协议 这边我们首先需要简单介绍一下redis协议.参考自https://redis.io/topics/protocol redis协议即RESP 的数据类型有5类,简单字符串.错误.整数.大字…
memcache是一种和redis类似的高速缓存服务器,但是memcache只提供键值对这种简单的存储方式,相对于redis支持的存储方式多样化,memcache就比较简单了.memcache通过tcp或者udp连接来实现memcache客户端和服务端的交互.memcache的协议是自定的,也分为两种:一种是文本协议(这是我们今天讨论的重点),另一种是二进制协议(在我们今天讨论的范围),这里仅仅介绍用tcp连接以及文本协议通信的memcache协议.如有描述不当的地方请大家指出. memcach…
本文想要完成对twemproxy发送流程--msg_send的探索,对于twemproxy发送流程的数据结构已经在<twemproxy接收流程探索--剖析twemproxy代码正编>介绍过了,msg_send和msg_recv的流程大致类似.请在阅读代码时,查看注释,英文注释是作者对它的代码的注解,中文注释是我自己的感悟. 函数msg_send rstatus_t msg_send(struct context *ctx, struct conn *conn) { rstatus_t stat…
本文旨在帮助大家探索出twemproxy接收流程的代码逻辑框架,有些具体的实现需要我们在未来抽空去探索或者大家自行探索.在这篇文章开始前,大家要做好一个小小的心理准备,由于twemproxy代码是一份优秀的c语言代码,为此,在twemproxy的代码中会大篇幅使用c指针.但是不论是普通类型的指针还是函数指针,都可以让我们这些c语言使用者大饱眼福,生出一种“原来还可以这样写!!!”的快感. 数据结构 在探索twemproxy接收流程之前,我们必须对一些我们会用到的数据结构进行说明,以便我们更好地去…
在twemproxy的发送和接收流程剖析中,我们已经完全弄清楚twemproxy如何将客户端以及服务端发来的包切分成msg,获得一个独立的msg后twemproxy应该如何处理?这是本文这次需要重点介绍的内容. twemproxy的主干流程 图1 twemproxy的主干流程 如图1所示,twemproxy主要通过3个队列进行模块间的数据交互:客户端连接conn的发送队列conn->omsg_q,服务端连接s_conn的输入队列s_conn->imsg_q,服务端连接s_conn的发送队列s_…
twemproxy在redis上能处理多命令流程只有mset,mget,del的命令,例如mset的话是mset k1 v1 k2 v2 k3 k3,mget的话是mget k1 k2 k3,del的话是del k1 k2 k3.twemproxy在memcache上能处理多命令流程只有get\gets命令,例如get的话是get k1 k2 k3 但是由于twemproxy是redis或memcahe协议的代理,在后端有多台redis或memcache,为此,所有的key/value对会分散在…
本篇将去探索twemproxy源码的主干流程,想来对于想要开始啃这份优秀源码生肉的童鞋会有不小的帮助.这里我们首先要找到 twemproxy正确的打开方式--twemproxy的文件结构,接着介绍twemproxy程序代码框架,最后介绍twemproxy程序的主干流程.主干流程是本章节的重中之重.这次主要是为了能将这份代码较为复杂的流程进行一些简单的模块分解和流程分解,以方便我们后面的阅读. twemproxy的文件结构 当然接下来首先要上一幅图,就是twemproxy的文件结构图 图1 文件结…
twemproxy背景 在业务量剧增的今天,单台高速缓存服务器已经无法满足业务的需求, 而相较于大容量SSD数据存储方案,缓存具备速度和成本优势,但也存在数据安全性的挑战.为此搭建一个高速缓存服务器集群来进行分布式存储是十分必要的. 目前主流的高速缓存服务器是redis和memchache.而twemproxy是支持memcached和redis协议的轻量级代理中间件,能用于高速缓存服务器集群的搭建.为此,twemproxy是高速缓存服务器集群的核心组件之一,也是业界较为成熟的高速缓存服务器集群…
在这篇文章开始前,大家要做好一个小小的心理准备,由于twemproxy代码是一份优秀的c语言,为此,在twemproxy的代码中会大篇幅使用c指针.但是不论是普通类型的指针还是函数指针,都可以让我们这些c语言使用者大饱眼福,生出一种"原来还可以这样写!!!"的快感.这篇文章旨在帮助大家探索出twemproxy接收流程的代码逻辑框架,有些具体的实现需要我们在未来抽空去探索或者大家自行探索. 数据结构 在探索twemproxy接收流程之前,我们必须对一些我们可能会用到的数据结构进行说明,以…
又是喜闻乐见的新坑,前面的mysql协议,当我在解读go-mysql包的时候,会重新讲到,至于Leetcode的更新会与go语言同步.关于这个redis的新坑,目前打算通过剖析twemproxy源码来间接介绍redis的协议,实现手段等等.下面先介绍一下我们的主角--twemproxy. twemproxy是由twitter(推特)公司在2012年在github上开源轻量级的高速缓存服务器集群代理,这里的高速缓存服务器就是指redis以及memcache.我们主要讨论的是redis集群下的twe…
转:http://blog.csdn.net/yangzheng_yz/article/details/11526747 PPP(Point to Point Protocol,点对点协议)协议是为在两个对等实体间传输数据包,建立简单连接而设计的.这种连接提供了同时的双向全双工操作,并且假定数据包是按顺 序投递的.PPP协议还满足了动态分配IP地址的需要,并能够对上层的多种协议提供支持.PPP在TCP/IP协议集中是位于数据链路层的协议,其物理实 现方式有两种:一种是通过以太网口(这时称之为PP…
[时间:2018-04] [状态:Open] [关键词:流媒体,stream,HLS, AOSP, 源码分析,HttpLiveSource, LiveSession,PlaylistFetcher] 1. 引言 本文作为HLS综述的后续文章,也是我之前对Nuplayer源码分析中GenericSource源码解析的姊妹篇.当然本文侧重于结合HLS原理来分析NuPlayer中相关实现逻辑.如果你对NuPlayer不是很了解,建议先简单了解下. 本文重点关注的是NuPlayer中的HttpLiveS…
===================================================== 视音频数据处理入门系列文章: 视音频数据处理入门:RGB.YUV像素数据处理 视音频数据处理入门:PCM音频采样数据处理 视音频数据处理入门:H.264视频码流解析 视音频数据处理入门:AAC音频码流解析 视音频数据处理入门:FLV封装格式解析 视音频数据处理入门:UDP-RTP协议解析 ===================================================…
wireshark不久前升级到1.10.0稳定版,这个版本正如其版本号一样,相比1.8.x有较大变化. 我们先说说在windows下编译的问题,1.8.4/1.8.6版本的编译见我的文章:http://www.cnblogs.com/zzqcn/archive/2013/04/23/3039110.html,这是重要的参考.更早的版本编译也是大同小异.这里要说一句,我在网上搜到的wireshark Windows下编译貌似全是我写的,csdn上那个blackboyofsnp也是我. 编译时的操作…
在Eclipse上使用egit插件通过ssh协议方式上传项目代码 前戏: 使用ssh方式可以不通过https协议,避免直接提供账号密码的方式上传项目到git在线服务器,如Bitbucket.GitHub,同时极其可靠的保证账号安全性. 对于像笔主一样刚出道的程序员,习惯于使用eclipse的GUI界面,面对百度上搜索出来关于git操作的漫天的命令行,总有百般无奈,好不容易找到了GUI上的操作教程,按着做却一遍遍的出错,翻查git服务器的ssh支持文档,也没查到问题,也考虑过eclipse的bug…
    本文详细阐述JY公司冷热量表(记热量)传输协议.并以此说明CJ/T-188协议在厂家详细应用时,并不一致. 本文及兴许文章将对这些不同点予以总结(文中所述协议与日志"CJ/T-188 冷热量表协议解析1"http://user.qzone.qq.com/2756567163/blog/1437462157的不同之处,将用红色予以标识).下面数据未经特殊说明.均指十六进制.     数据发送:         FE FE FE FE 68 20 32 41 31 40 00 00…
协议解析Bug分析 源自邮件协议RPC(远程过程调用)处理的Request请求数据包的bug.        一.Bug描写叙述 腾讯收购的Foxmailclient能够作为outlookclient的替代品与Exchange服务端进行交互完毕邮件收发.而我们所要做的就是让邮件经过我们代理的优化处理. 这时候问题来了,Outlookclient经由我们代理没有不论什么问题:可是换成Foxmail就会有错误弹窗.错误号:0x000006BE. 可是假设不经过代理,Foxmail收发邮件一切正常.…
一.平台 操作系统:windows 7 wireshark:1.10.3 lua:5.1 二.准备 lua 语言基本语法,特别是关于表操作和循环 wireshark 文档,包括用户使用文档和开发者文档,这些在 wireshark 官方网站都能找到 三.开始 我们首先定义一个简单的协议,我们使用 C 语言的语法描述, struct foo { ]; /* request response notify */ ]; /* 我们定义的各种服务类型 */ unsigned int msg_len; /*…
本文是 <用 Golang 实现一个 Redis>系列文章第二篇,本文将分别介绍Redis 通信协议 以及 协议解析器 的实现,若您对协议有所了解可以直接阅读协议解析器部分. Redis 通信协议 Redis 自 2.0 版本起使用了统一的协议 RESP (REdis Serialization Protocol),该协议易于实现,计算机可以高效的进行解析且易于被人类读懂. RESP 是一个二进制安全的文本协议,工作于 TCP 协议上.客户端和服务器发送的命令或数据一律以 \r\n (CRLF…
一:HTTP协议解析 1.HTTP协议即超文本传输协议,是一种详细规定了浏览器和万维网服务器之间互相通信的规则,他是万维网交换信息的基础,它允许将HTML(超文本标记语言)文档从web服务器传送到web浏览器. 2.发起一个HTTP请求 ①借助浏览器可以发起一个HTTP请求,输入URL ②不借助浏览器的时候,可以使用工具:curl 3.HTTP协议详解 目前HTTP协议最新版本为1.1,HTTP协议是一种无状态协议.无状态协议指的是web浏览器与web服务器之间不需要建立持久的连接,这意味着当一…
前言:随着工业化的发展,目前越来越多的开发,从互联网走向传统行业.其中,工业领域也是其中之一,包括各大厂也都在陆陆续续加入工业4.0的进程当中. 工业领域,最核心的基础设施,应该是与下位硬件设备或程序进行通信有关的了,而下位机市场基本上是PLC的天下.而PLC产品就像编程语言一样,类型繁多,协议也多…
(以下内容来自开发者分享,不代表 OpenHarmony 项目群工作委员会观点)本文转载自:https://harmonyos.51cto.com/posts/10608 夏德旺 软通动力信息技术(集团)股份有限公司 前言 市面上关于终端(手机)操作系统在 3GPP 协议开发的内容太少了,即使 Android 相关的资料都很少,Android 协议开发书籍我是没有见过的.可能是市场需求的缘故吧,现在市场上还是前后端软件开发从业人员最多,包括我自己. 基于我曾经也在某手机协议开发团队干过一段时间,…
pes : http://wenku.baidu.com/link?url=KjcA0qXqZ1bWVQTa8i1YOmygofldSQL7Pjj-zGRw1e_6_LFmVLo5DIWF0SNwVns-vao8r02kUwoYXUglzYZTeoIZxa2rc9QmtITJxMeGj4m TS协议解析第一部分(PAT) TS协议解析第二部分(PMT) TS协议解析第三部分(PES)…
本文主要介绍netty对http协议解析原理,着重讲解keep-alive,gzip,truncked等机制,详细描述了netty如何实现对http解析的高性能. 1 http协议 1.1 描述 标示 ASCII 描述 字符 CR  13 Carriage return (回车)  \n LF  10 Line feed character(换行) \r SP  32 Horizontal space(空格)   COLON  58 COLON(冒号) : http协议主要使用CRLF进行分割.…
PMD是一款采用BSD协议发布的Java程序代码检查工具.该工具可以做到检查Java代码中是否含有未使用的变量.是否含有空的抓取块.是否含有不必要的对象等.该软件功能强大,扫描效率高,是Java程序员debug的好帮手. PMD支持的编辑器包括: JDeveloper.Eclipse.JEdit.JBuilder.BlueJ.CodeGuide.NetBeans/Sun Java Studio Enterprise/Creator.IntelliJ IDEA.TextPad.Maven.Ant,…
在python中解析xml文件的模块用法,以及对模块封装的方法.原文转自:http://www.jbxue.com/article/16586.html 有如下的xml文件:<?xml version="1.0" encoding="utf-8" ?> <root> <childs> <child name='first' >1</child> <child value="2"&g…
类库文件我们在文件最后面下载 [ThoughtWorks.QRCode.dll 就是类库] 使用时需要增加: using ThoughtWorks.QRCode.Codec;using ThoughtWorks.QRCode.Codec.Data;using ThoughtWorks.QRCode.Codec.Util; 主要源代码: 1.生成二维码  代码如下 复制代码 QRCodeEncoder qrCodeEncoder = new QRCodeEncoder();   String en…
前言 如果是C/S专业毕业的或者是学过计算机网络课程的童鞋们,相信大家都知道网络模型的划分,本文首先来聊一聊目前对于B/S结构中,网络模型分解的两种方式. 没错,相信大家看到这个图片的时候就已经明白了,我们今天要讨论的就是这两种模型: 1. OSI 2. TCP/IP OSI 参考模型 OSI常常出现在我们的教学中,或者考试中:这位大神只存在于课本中或者理论教学当中,它的真身从没有现身与实际应用中...所以我们也就不在上面多做介绍. TCP/IP 模型 在现实中,我们常常使用的就是TCP/IP模…
BLE有几种空中包格式?常见的PDU命令有哪些?PDU和MTU的区别是什么?DLE又是什么?BLE怎么实现重传的?BLE ACK机制原理是什么?希望这篇文章能帮你回答以上问题. 虽然BLE空中包(packet)涉及BLE协议栈link layer,L2CAP,SMP和ATT等各层次,但link layer跟空中包格式关系最紧密,掌握了BLE packet的格式,就很容易理解BLE link layer协议的工作原理,因此文章取名"详解BLE空中包格式-兼BLE link layer协议解析&qu…
本文主要介绍netty对http协议解析原理,着重讲解keep-alive,gzip,truncked等机制,详细描述了netty如何实现对http解析的高性能. 1 http协议 1.1 描述 标示 ASCII 描述 字符 CR  13 Carriage return (回车)  \n LF  10 Line feed character(换行) \r SP  32 Horizontal space(空格)   COLON  58 COLON(冒号) : http协议主要使用CRLF进行分割.…