亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C > 正文

使用kendynet構建異步redis訪問服務

2020-01-26 15:37:52
字體:
來源:轉載
供稿:網友

最近開始在kendynet上開發手游服務端,游戲類型是生存挑戰類的,要存儲的數據結構和類型都比較簡單,于是選擇了用redis做存儲,數據類型使用string基本就足夠了。于是在kendynet上寫了一個簡單的redis異步訪問接口

設計理念
1.項目時間緊迫,不打算提供一個大而全的訪問接口,只提供一個request接口用以發出redis請求.

2.數據在redis中key和value都存儲為string,由使用者負責將數據序列化成string,從string反序列化回數據.

3.服務支持本地訪問和遠程訪問,服務自動根據請求發起的位置將結果返回給請求者.

4.數據庫操作結果通過異步消息返回給調用者

下面先看一個使用示例:

復制代碼 代碼如下:

#include <stdio.h>
#include <stdlib.h>
#include "core/msgdisp.h"
#include <stdint.h>
#include "testcommon.h"
#include "core/db/asyndb.h"

asyndb_t asydb;

int g = 0;
int count = 0;

void db_setcallback(struct db_result *result);

void db_getcallback(struct db_result *result)
{
    //printf("%s/n",result->result_str);
    count++;
    char req[256];
    snprintf(req,256,"set key%d %d",g,g);
    if(0 != asydb->request(asydb,new_dbrequest(db_set,req,db_setcallback,result->ud,make_by_msgdisp((msgdisp_t)result->ud))))
        printf("request error/n");
}

void db_setcallback(struct db_result *result)
{
    if(result->ud == NULL) printf("error/n");
    char req[256];
    snprintf(req,256,"get key%d",g);
    g = (g+1)%102400;
    asydb->request(asydb,new_dbrequest(db_get,req,db_getcallback,result->ud,make_by_msgdisp((msgdisp_t)result->ud)));
}


int32_t asynprocesspacket(msgdisp_t disp,msgsender sender,rpacket_t rpk)
{
    uint16_t cmd = rpk_read_uint16(rpk);
    if(cmd == CMD_DB_RESULT)
    {
        struct db_result *result = rpk_read_dbresult(rpk);
        result->callback(result);
        free_dbresult(result); 
    }
    return 1;
}


static void *service_main(void *ud){
    msgdisp_t disp = (msgdisp_t)ud;
    while(!stop){
        msg_loop(disp,50);
    }
    return NULL;
}

 


int main(int argc,char **argv)
{
    setup_signal_handler();
    msgdisp_t disp1 = new_msgdisp(NULL,
                                  NULL,
                                  NULL,
                                  NULL,
                                  asynprocesspacket,
                                  NULL);

    thread_t service1 = create_thread(THREAD_JOINABLE);

    msgdisp_t disp2 = new_msgdisp(NULL,
                                  NULL,
                                  NULL,
                                  NULL,
                                  asynprocesspacket,
                                  NULL);

    thread_t service2 = create_thread(THREAD_JOINABLE);   
    asydb = new_asyndb();
    asydb->connectdb(asydb,"127.0.0.1",6379);
    asydb->connectdb(asydb,"127.0.0.1",6379);
    //發出第一個請求uu
    char req[256];
    snprintf(req,256,"set key%d %d",g,g);

    asydb->request(asydb,new_dbrequest(db_set,req,db_setcallback,disp1,make_by_msgdisp(disp1)));
    thread_start_run(service1,service_main,(void*)disp1);

    asydb->request(asydb,new_dbrequest(db_set,req,db_setcallback,disp2,make_by_msgdisp(disp2)));
    thread_start_run(service2,service_main,(void*)disp2);   

    uint32_t tick,now;
    tick = now = GetSystemMs();
    while(!stop){
        sleepms(100);
        now = GetSystemMs();
        if(now - tick > 1000)
        {
            printf("count:%d/n",count);
            tick = now;
            count = 0;
        }
    }
    thread_join(service1);
    thread_join(service2);
    return 0;
}

上面的示例程序創建了一個redis異步處理器,然后建立了兩個到同一個redis服務器的連接,在實現中,每個連接都會創建一個工作線程,用以完成數據庫請求.這些工作線程會共享一個任務隊列,使用者發出的請求被投遞到任務隊列中,由工作線程提取并執行.

之后創建兩個消息分離器和兩個線程,然后發起兩個set請求和啟動消息分離器線程.

當set返回后,由消息分離器回調dbsetcallback,在dbsetcallback中繼續發起一個get請求, 在get的回調db_getcallback繼續發起新的set請求,如此反復.

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲free性xxxx护士白浆| 成人中文字幕在线观看| 亚洲大胆美女视频| 中文字幕亚洲综合久久筱田步美| 91欧美激情另类亚洲| 亚洲三级黄色在线观看| 日韩精品极品视频免费观看| 日韩欧美在线看| 亚洲最新av在线| 日韩欧美国产成人| 亚洲一级一级97网| 亚洲国产精品一区二区三区| 国产精品中文在线| 91视频8mav| 国产亚洲a∨片在线观看| 精品一区二区电影| 国产精品伦子伦免费视频| 成人h猎奇视频网站| 日本a级片电影一区二区| 久操成人在线视频| 91亚洲国产成人久久精品网站| 国产女精品视频网站免费| 亚洲free性xxxx护士白浆| 国产精品大陆在线观看| 黑人精品xxx一区| 国产剧情日韩欧美| 欧美激情亚洲一区| 久久久亚洲影院| 欧美成人高清视频| 日韩电影免费观看中文字幕| 亚洲高清av在线| 欧美乱妇40p| 日本欧美爱爱爱| 欧美日韩国产999| 日韩国产精品亚洲а∨天堂免| 亚洲一区二区国产| 亚洲欧洲在线观看| 91av在线网站| 精品国产视频在线| 成人做爰www免费看视频网站| 久久久亚洲网站| 欧美日韩亚洲91| 日韩精品电影网| 国产精品99久久久久久白浆小说| 欧美人与物videos| 日韩欧美亚洲范冰冰与中字| 国产精品视频久久| 欧美猛交免费看| 韩国精品美女www爽爽爽视频| 国产精品亚洲美女av网站| 亚洲永久在线观看| 欧美午夜精品久久久久久浪潮| 欧美一级片一区| 日韩激情av在线免费观看| 欧美一级大片在线观看| 成人黄色在线观看| 伊人久久综合97精品| 国产99久久精品一区二区| 亚洲精品久久久久久久久| 色综合导航网站| 国产日韩欧美91| 亚洲人成网站777色婷婷| 亚洲色图av在线| 国产精品久久久久久久app| 国产精品成人av在线| 欧美性猛交xxxx富婆弯腰| 亚洲性日韩精品一区二区| 国精产品一区一区三区有限在线| 亚洲影院高清在线| 国产欧美日韩精品专区| 黑人与娇小精品av专区| 亚洲福利在线看| 一区二区国产精品视频| 日本久久久久亚洲中字幕| 久久人人爽人人爽爽久久| 日韩有码在线播放| 日韩av在线网| 91干在线观看| 久久香蕉国产线看观看网| 亚洲精品按摩视频| 亚洲欧美一区二区三区四区| 亚洲精品视频在线观看视频| 91免费高清视频| 91精品视频观看| 亚洲国产成人精品女人久久久| 成人午夜一级二级三级| 亚洲一区二区日本| 亚洲精品久久在线| 日韩中文字幕第一页| 97在线视频免费观看| 4438全国成人免费| 日日噜噜噜夜夜爽亚洲精品| 97国产真实伦对白精彩视频8| 国产精品色午夜在线观看| 久久精品影视伊人网| 国产精品99蜜臀久久不卡二区| 国产精品丝袜一区二区三区| 精品动漫一区二区| 精品欧美国产一区二区三区| 激情久久av一区av二区av三区| 欧美丝袜一区二区三区| 91中文字幕在线观看| 国产日韩专区在线| 亚洲综合精品一区二区| 国产精品久久久久久久7电影| 国产激情久久久| 国产精品日韩在线| 精品亚洲va在线va天堂资源站| 亚洲一区久久久| 日本三级久久久| 日韩av在线精品| 成人性生交大片免费观看嘿嘿视频| 中文字幕国产日韩| 欧美高清在线视频观看不卡| 成人欧美一区二区三区在线| 精品香蕉一区二区三区| 精品国内产的精品视频在线观看| 国产精品美女视频网站| 国产一区二区视频在线观看| 久久精品国产成人| 91麻豆桃色免费看| 国产精品国产自产拍高清av水多| 国产日韩精品视频| 国产一区在线播放| 亲爱的老师9免费观看全集电视剧| 国产精品一区二区久久久久| 日韩欧美国产骚| 91经典在线视频| 欧美天天综合色影久久精品| 91精品免费久久久久久久久| 国产日韩视频在线观看| 欧美大片大片在线播放| 欧美精品videos性欧美| 亚洲欧美一区二区三区四区| 欧美老女人bb| 国产午夜精品全部视频播放| 亚洲女人被黑人巨大进入| 亚洲成人久久久久| 久久99视频免费| 色噜噜狠狠色综合网图区| 色多多国产成人永久免费网站| 亚洲国产精品电影在线观看| 在线中文字幕日韩| 日韩中文字幕国产| 韩国欧美亚洲国产| 日韩中文字幕久久| 国产欧美日韩精品专区| 国产精品18久久久久久麻辣| 欧美日韩国产一区中文午夜| 亚洲男人第一网站| 亚洲国产精品va在看黑人| 亚洲人成伊人成综合网久久久| 亚洲欧美精品suv| 久久躁狠狠躁夜夜爽| 国产大片精品免费永久看nba| 韩国视频理论视频久久| 蜜臀久久99精品久久久无需会员| 海角国产乱辈乱精品视频| 日韩精品欧美激情| 精品视频—区二区三区免费| 欧美综合第一页| 红桃视频成人在线观看| 蜜臀久久99精品久久久无需会员| 久久久亚洲福利精品午夜|