- 博客(10)
- 资源 (30)
- 收藏
- 关注
原创 函数式组合编程,完胜类体系编程
考虑打印MP4各种BOX的实现,一种是类似类体系,用函数重载来实现:template<typename T>stringstream& __srs_print_mp4_vector(std::vector<T>& arr, stringstream& ss, int level, bool is_box){ for (size_t i = 0; i < arr.size(); i++)
2017-05-30 18:33:47 947 1
原创 timeval和timespec转换
条件等待时,调用pthread_cond_timedwait,需要从timeval转换为timespec,如果转换错误,会导致条件等待失败返回22,正确的转换方式是:void wait(pthread_cond_t* cond, pthread_mutex_t* lock, uint32_t timeout_ms){ pthread_mutex_lock(lock);
2017-05-27 21:11:09 4249
原创 GOLANG使用Context管理关联goroutine
原文:https://gocn.io/article/333一般一个业务很少不用到goroutine的,因为很多方法是需要等待的,例如http.Server.ListenAndServe这个就是等待的,除非关闭了Server或Listener,否则是不会返回的。除非是一个API服务器,否则肯定需要另外起goroutine发起其他的服务,而且对于API服务器来说,在http.Handler的处理函数中
2017-05-19 15:09:06 2886 1
原创 GOLANG使用嵌入结构实现接口
原文:https://gocn.io/article/332考虑一个Packet接口,一般会返回一个Header,例如:type PacketHeader struct { ID uint32 Timestamp uint64}type Packet interface { encoding.BinaryMarshaler encoding.BinaryUnmars
2017-05-19 13:24:18 2759
原创 使用两个context实现CLOSE包的超时等待
原文:https://gocn.io/article/331在UDP中,一般发送者发送包后,如果一定的时间对方没有收到,就需要重传。例如UDP实现握手的过程,如果握手的包,比如RTMFP协议的IHELLO,发送给对方后,如果一定1秒没有收到,就应该重发一次,然后等3秒、6秒、9秒,如果最后没有收到就是超时了。最后一个Close包,发送者不能等待这么长的时间,所以需要设置一个较短的时间做超时退出。一般
2017-05-18 20:39:49 927
原创 GOLANG实现超时对象检测的最好理解的方式
原文:https://gocn.io/article/328依赖于心跳的系统,都需要超时检测。比如P2P系统中客户端每隔120秒向数据服务器发送一次数据汇总,服务器就需要维护一个超时时间。比如一个UDP服务器,在和客户端之间创建Session之后,如果没有数据包,一般会有Ping包,说明这个Session是存活的,服务器在发现Session超时后也需要清理。首先,服务器一般需要维护一个列表,以Pee
2017-05-16 17:40:57 2895 1
原创 GOLANG接口适配,组合方式的灵活接口演化
原文:https://gocn.io/article/326在OO(Object Oriented)原则中,有一条叫做:优先使用组合,而不是继承。虽然GOLANG并不是OO的语言(没有继承和多态),但是不妨碍GOLANG使用这条原则,而GOLANG的作者就强调过这一点,在GOLANG中是使用组合而非继承来扩展。装逼的说来,继承是一种名词化的语言体系,先进行业务抽象然后设计类体系和继承关系。而组合,强
2017-05-15 20:54:06 1896
原创 GOLANG简单类型定义,在协议解析的妙用
在协议解析中,经常需要用到转换不同的含义,比如声音的采样率,在FLV中定义和AAC中定义是不同的。在FLV中只有4中采样率5512, 11025, 22050, 44100。而在AAC中有16种采样率96000, 88200, 64000, 48000, 44100, 32000, 24000, 22050, 16000, 12000, 11025, 8000, 7350(还有4个是保留的)。也就
2017-05-11 15:41:54 4039
原创 GOLANG实现类似C++模板,返回符合类型的对象
原文参考:https://gocn.io/article/319在协议解析中,C++的模板有比较大的作用,有时候我们希望丢弃所有的包,只留下特定类型的包。参考SRS的代码SrsRtmpClient::connect_app2:类型系统的设计, SrsConnectAppResPacket继承自SrsPacket:class SrsPacket;class SrsConnectAppResPacke
2017-05-09 20:20:57 3036
原创 GOLANG的context和并发模型
GOLANG1.7新增了context,最初这个package是在golang.org/x/net/context中的,后来证实对很多程序都是必须的,就纳入了标准库。对context的介绍是在context,读这个blog之前,要先读pipelines(pipelines提出了使用close(chan)的方式广播退出事件)。一般来说,context是用在request的处理,例如http请求的处理中
2017-05-03 19:27:13 4218 2
Pattern.Oriented.Software.Architecture.Volume.2
2012-11-29
mp4 file format引用文档
2012-11-04
The.Cpp.Programming.Language.Special.Edition
2012-10-29
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人