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

本文分析了 Searpc 中的 searpc_server_call_function、searpc_compute_signature、register_func 和 searpc_server_register_marshal 函数,详细讲解了它们的功能和在 RPC 调用过程中的作用。searpc_server_call_function 负责检查和调用 RPC 函数,searpc_compute_signature 计算函数签名,register_func 用于函数注册,而 searpc_server_register_marshal 注册 marshal 函数。此外,提到了 searpc-codegen.py 文件在生成 marshal 函数中的作用。
摘要由CSDN通过智能技术生成

2021SC@SDUSC

目录

2021SC@SDUSC

server遗留问题

searpc_server_call_function

searpc_compute_signature

register_func

searpc_server_register_marshal

searpc-codegen.py

type_table


server遗留问题

searpc_server_call_function

char* 
searpc_server_call_function (const char *svc_name,
                             gchar *func, gsize len, gsize *ret_len)
{
    SearpcService *service;
    json_t *array;
    char* ret;
    json_error_t jerror;
    GError *error = NULL;
​
#ifdef __linux__
    struct timeval start, end, intv;
​
    if (slow_log_fp) {
        gettimeofday(&start, NULL);
    }
#endif
​
    service = g_hash_table_lookup (service_table, svc_name);
    if (!service) {
        char buf[256];
        snprintf (buf, 255, "cannot find service %s.", svc_name);
        return error_to_json (501, buf, ret_len);
    }
    
    array = json_loadb (func, len, 0 ,&jerror);
    
    if (!array) {
        char buf[512];
        setjetoge(&jerror,&error);
        snprintf (buf, 511, "failed to load RPC call: %s\n", error->message);
        json_decref (array);        
        g_error_free(error);
        return error_to_json (511, buf, ret_len);
    }
​
    const char *fname = json_string_value (json_array_get(array, 0));
    FuncItem *fitem = g_hash_table_lookup(service->func_table, fname);
    if (!fitem) {
        char buf[256];
        snprintf (buf, 255, "cannot find function %s.", fname);
        json_decref (array);
        return error_to_json (500, buf, ret_len);
    }
​
    ret = fitem->marshal->mfunc (fitem->func, array, ret_len);
​
#ifdef __linux__
    if (slow_log_fp) {
        gettimeofday(&end, NULL);
        timersub(&e
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值