OSSRS

https://github.com/ossrs

排序:
默认
按更新时间
按访问量

GOLANG探测HTTP连接断开

考虑基于HTTP的RPC,或者HTTP服务器主动通知客户端的机制,就是HTTP Long-Polling,意思就是客户端发起一个长连接,服务器阻塞忍住不响应直到: 超时,比如5秒后,我们给客户端响应一个keepalive,意思是现在还没有啥事,请继续polling。 拿到结果,这个可能是任何时候,...

2017-11-22 12:25:04

阅读数:1893

评论数:1

GOLANG实现的HTTP转HTTPS的代理

有时候需要将后端的HTTP服务,转成HTTPS,可以用一个代理。 Reamark: 如果是GOLANG的后端服务,可以直接用库go-oryx-lib/https。 这个代理支持自签名的证书,也支持letsencrypt的证书。 Remark: Letsencrypt只支持少量域名的情况,比...

2017-10-13 12:14:54

阅读数:1940

评论数:0

GOLANG中time.After释放的问题

原文:https://gocn.io/article/403在谢大群里看到有同学在讨论time.After泄漏的问题,就算时间到了也不会释放,瞬间就惊呆了,忍不住做了试验,结果发现应该没有这么的恐怖的,是有泄漏的风险不过不算是泄漏,先看API的说明:// After waits for the d...

2017-07-29 11:59:36

阅读数:2249

评论数:2

Testivus On Test Coverage

原文:点这个链接Testivus On Test Coverage一天早上,一个程序员问大师:我准备要写单元测试了,请问我要达到多少覆盖率呢?大师回答说:不用担心覆盖率了,写出来有效的单元测试就好了。程序员笑了,向大师鞠躬,然后愉快的去干活了。过了一会儿,第二个程序员向大师问了同样的问题。大师指着...

2017-07-06 15:17:00

阅读数:576

评论数:1

GOLANG使用Context实现传值、超时和取消

原文:https://gocn.io/article/373GO1.7之后,新增了context.Context这个package,实现goroutine的管理。Context基本的用法参考GOLANG使用Context管理关联goroutine。实际上,Context还有个非常重要的作用,就是设...

2017-06-28 16:25:22

阅读数:3804

评论数:0

Fire And Motion:聚焦前进,避免当炮灰

Fire And Motion2002年01月06日,JOEL SPOLSKY,Trello联合创始人,如果大神你不知道Trello是什么,那么你肯定知道Stack Overflow,嗯,我是StackOverflow的CEO。有时候,我就是啥事也没有干出来,啥事也没有干成。和你一样,我每天可是准...

2017-06-26 13:49:53

阅读数:1159

评论数:0

GOLANG宽泛接口在测试中的大用处

原文:https://gocn.io/publish/article/368考虑测试一个函数:func request(ctx context.Context, hc *http.Client, api string) (err error) { var hreq *http.Reques...

2017-06-23 17:27:31

阅读数:393

评论数:0

GOLANG测试必须用带堆栈的errors

原文:https://gocn.io/article/366GOLANG测试时,可以用匿名对象填充测试序列,但是如果没有带堆栈的errors,那么会造成出现错误时无法排查。先看测试序列的填充,参考tricks-2015这个文章,怕你翻不了墙,我把内容粘贴过来就是:Anonymous structs...

2017-06-22 18:11:45

阅读数:863

评论数:0

GOLANG最容易做测试MOCK

原文:https://gocn.io/article/353测试时,一些底层的库非常难以MOCK,比如HASH摘要算法,怎么MOCK?假设有个函数,是用MD5做摘要:func digest(data []byte, h hash.Hash) ([]byte, error) { if _, ...

2017-06-09 18:27:32

阅读数:3990

评论数:0

GOLANG空指针崩溃时堆栈消失和解决方案

原文:https://gocn.io/article/351在错误处理这个文章中,tkk提出了空指针时堆栈消失的问题,看下面的例子:package mainfunc main() { run() // line 4 } func run() { causedPanic() } fu...

2017-06-07 17:06:25

阅读数:2361

评论数:0

GOLANG错误处理最佳方案

原文:https://gocn.io/article/348ERRORGOLANG的错误很简单的,用error接口,参考golang error handling:if f,err := os.Open("test.txt"); err != nil { return ...

2017-06-05 10:06:41

阅读数:5623

评论数:0

函数式组合编程,完胜类体系编程

考虑打印MP4各种BOX的实现,一种是类似类体系,用函数重载来实现: template<typename T> stringstream& __srs_print_mp4_vector(std::vector<T>& arr, stringstream&am...

2017-05-30 18:33:47

阅读数:516

评论数:1

timeval和timespec转换

条件等待时,调用pthread_cond_timedwait,需要从timeval转换为timespec,如果转换错误,会导致条件等待失败返回22,正确的转换方式是:void wait(pthread_cond_t* cond, pthread_mutex_t* lock, uint32_t ti...

2017-05-27 21:11:09

阅读数:977

评论数:0

GOLANG使用Context管理关联goroutine

原文:https://gocn.io/article/333一般一个业务很少不用到goroutine的,因为很多方法是需要等待的,例如http.Server.ListenAndServe这个就是等待的,除非关闭了Server或Listener,否则是不会返回的。除非是一个API服务器,否则肯定需要...

2017-05-19 15:09:06

阅读数:1236

评论数:1

GOLANG使用嵌入结构实现接口

原文:https://gocn.io/article/332考虑一个Packet接口,一般会返回一个Header,例如:type PacketHeader struct { ID uint32 Timestamp uint64 }type Packet interface { ...

2017-05-19 13:24:18

阅读数:1307

评论数:0

使用两个context实现CLOSE包的超时等待

原文:https://gocn.io/article/331在UDP中,一般发送者发送包后,如果一定的时间对方没有收到,就需要重传。例如UDP实现握手的过程,如果握手的包,比如RTMFP协议的IHELLO,发送给对方后,如果一定1秒没有收到,就应该重发一次,然后等3秒、6秒、9秒,如果最后没有收到...

2017-05-18 20:39:49

阅读数:394

评论数:0

GOLANG实现超时对象检测的最好理解的方式

原文:https://gocn.io/article/328依赖于心跳的系统,都需要超时检测。比如P2P系统中客户端每隔120秒向数据服务器发送一次数据汇总,服务器就需要维护一个超时时间。比如一个UDP服务器,在和客户端之间创建Session之后,如果没有数据包,一般会有Ping包,说明这个Ses...

2017-05-16 17:40:57

阅读数:1400

评论数:1

GOLANG接口适配,组合方式的灵活接口演化

原文:https://gocn.io/article/326在OO(Object Oriented)原则中,有一条叫做:优先使用组合,而不是继承。虽然GOLANG并不是OO的语言(没有继承和多态),但是不妨碍GOLANG使用这条原则,而GOLANG的作者就强调过这一点,在GOLANG中是使用组合而...

2017-05-15 20:54:06

阅读数:475

评论数:0

GOLANG简单类型定义,在协议解析的妙用

在协议解析中,经常需要用到转换不同的含义,比如声音的采样率,在FLV中定义和AAC中定义是不同的。在FLV中只有4中采样率5512, 11025, 22050, 44100。而在AAC中有16种采样率96000, 88200, 64000, 48000, 44100, 32000, 24000, ...

2017-05-11 15:41:54

阅读数:1709

评论数:0

GOLANG实现类似C++模板,返回符合类型的对象

原文参考:https://gocn.io/article/319在协议解析中,C++的模板有比较大的作用,有时候我们希望丢弃所有的包,只留下特定类型的包。参考SRS的代码SrsRtmpClient::connect_app2:类型系统的设计, SrsConnectAppResPacket继承自Sr...

2017-05-09 20:20:57

阅读数:1089

评论数:0

提示
确定要删除当前文章?
取消 删除
关闭
关闭