手摸手教你撸一个微服务框架-关于服务端的处理

时间:2022-07-24
本文章向大家介绍手摸手教你撸一个微服务框架-关于服务端的处理,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

背景

上一篇整体讲解了微服务的整体设计思路。有小伙伴留言说,关于服务端的一些实现不是非常清楚,这里特别记录说明一下。

基本原理

看一下这个例子:

$ python3
Python 3.7.4 (v3.7.4:e09359112e, Jul  8 2019, 14:54:52)
[Clang 6.0 (clang-600.0.57)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>>
>>> def testfunc(a):
...     print(a)
...
>>> apps = {}
>>> apps["test"] = testfunc
>>>
>>> apps["test"]
<function testfunc at 0x7fedd0bc7f80>
>>> apps["test"](1)
1

这个例子,我定义了一个字典apps这个字典,这个字典的keytestvalue是一个函数。这个是重点。这个字典的数据结构是,key-func的格式,我们直接获取这个字典的value,可以看到,打印出来是一个内存地址<function testfunc at 0x7fedd0bc7f80>。这里不同于我们正常的使用。

那么这个内存地址加上一个()。里面加一个参数。可以看到,这个结果实际上是执行了这个函数。

再接着往下看。

>>> apps['test'].__call__("hello")
hello
>>>

这里可以看到,我们调用这个指针的__call__方法。并且传入参数后,也执行了这个函数。

往上包装一层

从基本原理可以看到,通过这种方式,可以把需要调用的函数,全部放到一个字典去。

然后通过一些key,就能找到对应的处理函数,并且也能带一些请求参数进来。

所以,这里就可以在服务的对象中增加一个类成员,这个成员是一个字典。

服务启动的时候接受请求,从请求中按格式去获取请求的服务名,再通过服务名找到这个类成员中的value。最后调用call方法,或者()的方式执行函数并且返回结果。

参数格式,可以选用符合类型的参数,例如字典,列表这类数据,里面可以包含多元化的参数。

总结

总结一下,服务这块要做的事有两件事。

  1. 服务端注册处理函数。

把所有的处理函数,设置一定的key,扔到服务类的类成员中

  1. 服务的入口函数解析请求。

从请求中获取服务名字,然后用类成员中根据服务名字取出这个处理函数执行。并且返回执行结果。