接上篇:iOS即时通讯之CocoaAsyncSocket源码解析四         原文 前言: 本文为CocoaAsyncSocket Read篇终,将重点涉及该框架是如何利用缓冲区对数据进行读取.以及各种情况下的数据包处理,其中还包括普通的.和基于TLS的不同读取操作等等. 正文: 前文讲完了两次TLS建立连接的流程,接着就是本篇的重头戏了:doReadData方法.在这里我不准备直接把这个整个方法列出来,因为就光这一个方法,加上注释有1200行,整个贴过来也无法展开描述,所以在这里我打算对…
原文 前言: 本文为CocoaAsyncSocket源码系列中第二篇:Read篇,将重点涉及该框架是如何利用缓冲区对数据进行读取.以及各种情况下的数据包处理,其中还包括普通的.和基于TLS的不同读取操作等等.注:由于该框架源码篇幅过大,且有大部分相对抽象的数据操作逻辑,尽管楼主竭力想要简单的去陈述相关内容,但是阅读起来仍会有一定的难度.如果不是诚心想学习IM相关知识,在这里就可以离场了... 注:文中涉及代码比较多,建议大家结合源码一起阅读比较容易能加深理解.这里有楼主标注好注释的源码,有需要的…
原文 前言 本文承接上文:iOS即时通讯之CocoaAsyncSocket源码解析一 上文我们提到了GCDAsyncSocket的初始化,以及最终connect之前的准备工作,包括一些错误检查:本机地址创建以及socket创建:服务端地址的创建:还有一些本机socket可选项的配置,例如禁止网络出错导致进程关闭的信号等. 上文讲到了本文方法八--创建Socket,其中有这么一行代码: //和connectInterface绑定 if (![self bindSocket:socketFD toI…
申明:本文内容属于转载整理,原文连接 前言: CocoaAsyncSocket是谷歌的开发者,基于BSD-Socket写的一个IM框架,它给Mac和iOS提供了易于使用的.强大的异步套接字库,向上封装出简单易用OC接口.省去了我们面Socket向Socket以及数据流Stream等繁琐复杂的编程. 本文为一个系列,旨在让大家了解CocoaAsyncSocket是如何基于底层进行封装.工作的. 注:文中涉及代码比较多,建议大家结合源码一起阅读比较容易能加深理解.这里有楼主标注好注释的源码,有需要的…
原文 前言 本文实例Github地址:即时通讯的数据粘包.断包处理实例. 本文旨以实例的方式,使用CocoaAsyncSocket这个框架进行数据封包和拆包.来解决频繁的数据发送下,导致的数据粘包.以及较大数据(例如图片.录音等等)的发送,导致的数据断包. 一.什么是粘包? 经常我们发现,如果用客户端同一时间发送几条数据,而服务端只能收到一大条数据,类似下图: 如图,由于传输的过程为数据流,经过TCP传输后,三条数据被合并成了一条,这就是数据粘包了. 那么为什么会造成粘包呢? 原来这是因为TCP…
今天要聊的话题可能被大家关注得不过,但是对于 Celery 来说确实很有用的功能,曾经我在工作中遇到这类情况,就是我们将所有的任务都放在同一个队列里面,然后有一天突然某个同学的代码写得不对,导致大量的耗时任务被同时塞进了消息队列里面,这就悲剧了,这直接导致了其他服务长时间不可用,例如发送登录短信验证码无法使用了,还有支付信息无法同步了等等,反正就是造成了一些不小的影响. 当时我们的处理方式就很被动,只能手动连接上 MQ,然后把消息卸掉,其实也就手动将这些消息抛弃掉,从而让其他业务的消息可能正常运…
欢迎来我的 Star Followers 后期后继续更新Dubbo别的文章 Dubbo 源码分析系列之一环境搭建 博客园 Dubbo 入门之二 --- 项目结构解析 博客园 Dubbo 源码分析系列之三 -- 架构原理 博客园 Dubbo 源码解析四 -- 负载均衡LoadBalance 博客园 下面是个人博客地址,页面比博客园美观一些其他都是一样的 Dubbo 源码分析系列之一环境搭建" Dubbo 源码分析系列之一环境搭建 个人博客地址" Dubbo 入门之二 --- 项目结构解析…
Masonry是iOS在控件布局中经常使用的一个轻量级框架,Masonry让NSLayoutConstraint使用起来更为简洁.Masonry简化了NSLayoutConstraint的使用方式,让我们可以以链式的方式为我们的控件指定约束.本篇博客的主题不是教你如何去使用Masonry框架的,而是对Masonry框架的源码进行解析,让你明白Masonry是如何对NSLayoutConstraint进行封装的,以及Masonry框架中的各个部分所扮演的角色是什么样的.在Masonry框架中,仔细…
上篇博客我们对Signal的基本实现以及Signal的面向协议扩展进行了介绍, 详细内容请移步于<Signal中的静态属性静态方法以及面向协议扩展>.并且聊了Signal的所有的g功能扩展都是放在Signal所实现的SignalProtocol协议的扩展中的.本篇博客就沿袭上篇博客的内容,我们来聊一下SignalProtocol的部分扩展.本篇博客我们主要来聊一下对Signal添加Observer的observe()方法扩展的具体实现,并且聊一下Signal的Map和Filter相关的功能扩展…
上篇博客我们对Signal的基本实现以及Signal的面向协议扩展进行了介绍, 详细内容请移步于<Signal中的静态属性静态方法以及面向协议扩展>.并且聊了Signal的所有的g功能扩展都是放在Signal所实现的SignalProtocol协议的扩展中的.本篇博客就沿袭上篇博客的内容,我们来聊一下SignalProtocol的部分扩展.本篇博客我们主要来聊一下对Signal添加Observer的observe()方法扩展的具体实现,并且聊一下Signal的Map和Filter相关的功能扩展…