-
Notifications
You must be signed in to change notification settings - Fork 385
link包介绍
说起来这不是第一次发布长连接网络库了,去年就整过一个开源,但是后来项目需要,往里面加了一堆很针对性的优化,觉得自己的设计不够完善,跟项目实现耦合得太紧,就把那个项目干掉了。
但是一直有一个残念在那里,最近又把项目里用的网络库整理了便并开源出来了,包名叫link(彩蛋:林克,玩过塞尔达吗?),项目地址:https://github.com/funny/link
简单来讲,link包是一个用于长连接型应用的简易框架。说它是简易框架是因为它的功能很少,相应的它的约束性很低,代码量也很少,容易掌握,容易按需扩展。
之所以只做简易框架是吸取第一次失败经验,保持整个包尽量只做一件事情,之前的包就是管太多了,还给提供了一个套网关,然后那个网关为了达到高效率就做了各种恶心的优化,最后就没办法见人了。
另外我每次看到有什么开源项目代码很多的,感觉自己没办法完全驾驭的,我就宁可不用。换位思考一下,如果我是使用者,我怎么敢用一个小作坊做的,里面有一大堆不知道干什么的代码的东西来跑我最核心的业务,要是出BUG也就算了,万一BUG无从查起,岂不是整个人都要要斯巴达了。
所以,link包不高级,很简单,保证懂Go的人都能读懂代码并完全驾驭,要做二次开发也是非常容易的,但是在它职能范围内的事情,一定负责做好。
目前,link包所提供的功能如下:
- 长连接的会话管理
- 基于频道概念的广播机制和会话分组机制
- 默认提供类似Erlang的
{packet, N}
那样的分包协议,并可以自定义分包协议实现 - 提供一些实现通讯层的常用工具类型(不强制使用),比如Buffer类型可以用于协议封包和解包
link包的核心类型有四个:
- PacketProtocol - 分包协议接口,它用要求分包协议需要实现哪些方法,从而做到可以自定义实现分包协议。
-
Server - 顾名思义就是服务器,它用来接收连接并把连接以
Session
的形式传递给应用。 - Session - 即会话,它将原始的连接包装起来,对应用提供异步消息发送和基于消息包的请求处理等接口。
- Channel - 频道,应用可以用频道对会话进行归类以及发送广播,频道的广播发送是经过优化的,可以避免消息的重复封包
link包对通讯的约束只到分包协议这一层,具体每个消息包的内容用什么格式是不约束的,你可以用link包结合gob或者json,也可以用自带的Buffer类型做一套消息封包和解包协议。
现在项目里还没有特别完整的大示例,只有几个小的演示程序在examples目录下,先勉强着看一下,如果有某块需求不知道怎么实现,可以提交issue,也欢迎大家做各种demo分享。