2021SC@SDUSC-山大智云源码分析(1)

本文详细分析了Seafile-server的源码,涉及ci/run.py的部署流程,searpc/go的Unix管道RPC客户端,lib/rpc_table.py的RPC函数定义,以及seafserver和rpc-service的C语言实现。Seafile-server通过libsearpc和libevhtp提供RPC和HTTP API,客户端利用Unix管道进行通信。
摘要由CSDN通过智能技术生成

2021SC@SDUSC

目录

前言

Seafile-server

源码分析

ci/run.py

/searpc/searpc.go

/lib/rpc_table.py

/python/seafile/rpcclient.py

/python/seaserv/api.py

/common/rpc-service.c

/server/seaf-server.c

结论

前言

libsearpc是rpc框架,而libevhtp是事件通知框架,两者的作用都是使客户端能够调用到所需要的服务,且都在seafile server中被调用,因此首先分析seafile server中相关代码

  • rpc框架:远程过程调用协议,使客户端能够通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的思想
  • libevhtp:提供http api,从而搭建http服务器

 

Seafile-server

Seafile的服务器核心。提供RPC给seahub、提供http api给桌面应用。

源码分析

ci/run.py

对seafile-server运行所需要的各部分组件进行部署与安装,包括libsearpc、libevhtp、ccnetserver等

...
@lru_cache()
def get_branch_json_file():
    url = '<https://raw.githubusercontent.com/haiwen/seafile-test-deploy/master/branches.json>'
    return requests.get(url).json()

def get_project_branch(project, default_branch='master'):
    travis_branch = os.environ.get('TRAVIS_BRANCH', 'master')
    if project.name == 'seafile-server':
        return travis_branch
    conf = get_branch_json_file()
    return conf.get(travis_branch, {}).get(project.name, default_branch)
class Project(object):
    def __init__(self, name):
        self.name = name
        self.version = ''

    @property
    def url(self):
        return '<https://www.github.com/haiwen/{}.git>'.format(self.name)

    @property
    def projectdir(self):
        return join(TOPDIR, self.name)

    def branch(self):
        return get_project_branch(self)

    def clone(self):
        if exists(self.name):
            with cd(self.name):
                shell('git fetch origin --tags')
        else:
            shell(
                'git clone --depth=1 --branch {} {}'.
                format(self.branch(), self.url)
            )

    @chdir
    def compile_and_install(self):
        cmds = [
            './autogen.sh',
            './configure --prefix={}'.format(PREFIX),
            'make -j{} V=0'.format(num_jobs()),
            'make install',
        ]
        for cmd in cmds:
            shell(cmd)

    @chdir
    def use_branch(self, branch):
        shell('git checkout {}'.format(branch))
class Libsearpc(Project):
    def __init__(self):
        super(Libsearpc, self).__init__('libsearpc')

    def branch(self):
        return 'master'
...
class Libevhtp(Project):
    def __init__(self):
        super(Libevhtp, self).__init__('libevhtp')

    def branch(self):
        return 'master'

    @chdir
    def compile_and_install(sel
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值