6

学习Golang之服务器框架编写 – 开篇

 3 years ago
source link: https://www.lanindex.com/%e5%ad%a6%e4%b9%a0golang%e4%b9%8b%e6%9c%8d%e5%8a%a1%e5%99%a8%e6%a1%86%e6%9e%b6%e7%bc%96%e5%86%99-%e5%bc%80%e7%af%87/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

学习Golang之服务器框架编写 – 开篇

2020/10/02 · Leave a comment

写在前面的废话

最近几年一直关注Golang(后面简称Go)的发展,最开始翻看了很多关于Go独特优点以及如何解决传统C/C++程序员痛点的文章,这几年也断断续续的使用Go写一些工具来辅助开发或者服务器事务处理,一方面是在实践中学习Go,另一方面是体验一下Go的“妙处”,看看是不是真说的那么神。但从目前来看收效并不明显,或者说自己没有明显感觉到Go的魅力,归结原因还是对Go使用程度不够。

纸上得来终觉浅,绝知此事要躬行。所以我决定使用Go来造一个服务器框架的轮子。在此之前见过太多的服务器框架,凡是和“框架”两字沾边,必然有一些个人偏好或者选择倾向(从模块结构,代码组织,使用方式等几个角度),而且一般都是针对某种特定场景的框架,比如Http服务、游戏服务、微服务等等。

所以这个轮子也逃不出“凡是”:它会带有一些个人偏好,并且倾向于游戏服务,甚至因为个人经验水平有限会有一些不成熟的设计。不管怎么说,欢迎一起讨论学习。

目前来说初步的功能已经实现,包括一些基本的功能测试用例,后续除了未知BUG的修改,还会出一版完整的使用样例,扩容一下CS通信相关,以及接口易用性的调试修改。

Github地址: https://github.com/lanyutc/blue

框架所包含的内容分成 核心 与 辅助 两大块,其中:

核心内容:

  • 名字发现服务
  • 基于名字发现的RPC

辅助内容:

  • 关键设置配置化
  • UID生成服务

内容列举的比较粗,后面我会陆续的写一些相关博文来对每块内容进行细节说明,每篇内容的核心无外乎三个点: 一、它是干什么的;二、它是如何运作的;三、为什么要这么设计。

其实这是经典的What,How,Why三部曲。既然是轮子,What是清晰的,How是殊途同归的,Why涉及到思考的过程,所以我会把内容的重点往Why做倾斜,与How相辅相成。

首先需要解释一点:我并不想弄一个大而全的东西,只提供必要的内容,如上文提到的核心内容。

这里其实有一些见仁见智,提供名字发现服务的主要原因是想将其与RPC组合起来,让调用者不用关心被调服务的IP,并且通过暴露出来的RPC调用方式组合成自己的策略。它的好处是:1、屏蔽了IP:Port对应的调用配置,减少出错几率;2、在加减服务或者服务异常的时候,做到自动发现、自动屏蔽。

我更喜欢把一个服务器看成对外对内两部分,对外理解成传统的CS通信,通俗点讲就是服务器与不可信的客户端之前通信;对内就是内部服务调用,即服务器与服务器之间的调用,用RPC实现(当然也可以用传统的CS思想来实现,但是现在一般不这么做了)。所以说RPC是必须的,与其相辅相成的名字发现服务也成了必须。

参考了以下成熟框架一些设计与思路:

https://github.com/TarsCloud/TarsGo

https://github.com/name5566/leaf

https://github.com/davyxu/cellnet

最后,框架的名字叫blue,没什么特别的寓意,个人偏好的首次体现:D

(全文结束)

转载文章请注明出处:漫漫路 - lanindex.com

Leave a Comment Cancel reply

Your email address will not be published.

在此浏览器中保存我的名字、电邮和网站。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK