基于WebSocket协议的多语言、多程序,多主机协同的微型网络库

文章介绍了Kubi_net,一个功能库用于解决跨编程语言、跨程序和多主机任务中的通信问题,提供轻量级API、断线重连机制及多语言支持,包括C++、Python和JavaScript等。它还展示了C++和Python的服务器和客户端示例代码。
摘要由CSDN通过智能技术生成

开发背景:

很多时候,系统的功能模块较多,跨程序,跨编程语言,或者需要多主机协同任务的需求是比较频繁的。因为我有很多即时性的视觉任务,前端和我对接的是u3d 和 html5的居多。为了保证项目顺利进行,和功能解耦设计这个功能库。(苦逼)kubi_net.

kubi_net解决的问题:

1. 更轻量级,可以直接对代码修改用于自己的项目。
2. 更彻底的断线重连机制,服务器断了,客户端重连请求依然存在,等服务器上线,客户端依然可以再次重连。
3. 服务器使用了两种信息轮询方法。可以直接集成在程序里面使用。
4. 直接支持 字符串、二进制数据传输,也支持字符串和二进制数据同时传输。

服务器端: 

 cmake构建 用c/c++编写 仅依赖libuv+protobuf库,并做了python绑定,可以直接基于cpp做业务编写,也可以使用python做业务编写。

客户端:

目前支持cpp 、Python 、js 、 c#(unity)

 服务器示例代码(cpp):

Kubi_Ser_Cpp11_Imp ser;
ser.OnServerClose([]()->void {
        LOG(WARNING) << "Server close!";
});
ser.OnClientEnter([](const std::string& uid, const std::string& ip, int port)->void {
    LOG(INFO) << "Kubi_Session has connect to server!";
    });
ser.OnClientLeave([](const std::string& uid)->void {
    LOG(WARNING) <<uid<< ",Kubi_Session has Leave ";
    });
ser.RegistRequestRoute("on_login", [](const std::string& uid, int pkg_id, const std::string& data_str, const std::string& data_byts)->void {
    //业务逻辑:
    Json::Value v_rsp;
    v_rsp["code"] = 123;
    v_rsp["msg"] = "welcome";
    ser.Response("on_login", uid, pkg_id, v_rsp.toStyledString().c_str(), NULL, 0);
    });
ser.RegistNotifyRoute("on_msg",  [](const std::string& uid, const std::string& data_str, const std::string& data_byts)->void {
    //业务逻辑:
    ser.Notify(uid,"on_msg", data_str.c_str(), (unsigned char*)data_byts.data(), data_byts.size());
    });
ser.SetNotEnterStageTime(-1);
ser.SetHeartTime(-1);
阻塞方式:
ser.Start(8080, true);
//回归到业务线程方式:
ser.Start(8080, false);
ser.RunInYourThread();
#在业务线程直接使用
ser.Notify(route, uid, str, bytes, len(bytes));

服务器示例代码(python): 

g_ser=Kubi_ser()
def WhenServerClose():
    pass
def WhenClientEnter(uid:str,ip:str,port:int):
    print(uid+" enter,ip:"+ip+" ,"+str(port))
    pass
def WhenClientLeave(uid:str):
    print(uid + "leave")
    pass
def On_login(uid:str,pkg_id:int,data_str:str,data_bytes):
    g_ser.Response("login",uid,pkg_id,"welcome",b'')
    pass
if __name__ == '__main__':
    g_ser.SetNotEnterStageTime(6)
    g_ser.SetHeartTime(10)
    g_ser.OnServerClose(WhenServerClose)
    g_ser.OnClientEnter(WhenClientEnter)    
    g_ser.OnClientLeave(WhenClientLeave)
    g_ser.RegistRequestRoute("login",On_login)
    阻塞方式:
    g_ser.Start(8080,True)
    //回归到业务线程方式:
     g_ser.Start(8080,False)
     server.Loop()

 客户端示例代码(cpp,其他的 感兴趣的朋友可以自行查看源码demo):

Kubi_Client client;
client.Start(user.uid, "ws://127.0.0.1", 8080);
client.OnEnter([]()->void{
    client.Request("on_login", user.to_json_str().c_str(), NULL, 0, [](const kubi::KNode* in) ->void {
        #请求回应:
    });
    client.OnNotice("on_msg", [](const kubi::KNode* in) ->void {
        //do you want:
    });
	
});
client.OnEnd([]()->void {
    printf("OnEnd...\n");
    client.TryToConnect();
});

//业务线程:
client.Loop();
client.Notice(router, str, bytes, len(bytes));

 关于demo:

demo 是视频Ascii艺术化处理的简单项目
有4个部分组成:
服务器端(cpp 、 python都实现了)
客户端:cpp 完成视频的解析和采集工作
客户端:python 完成Ascii艺术化的处理
客户端:unity js 做Ascii艺术化的展示工作 

 运行视频:

多编程语言 ,多程序,多主机 协调任务(源码的 demo)

关于稳定性:

目前该代码在我的项目运行:
项目为展厅项目
共31个
运行时3年

多编程语言 ,多程序,多主机 协调任务(戒指虚拟穿戴)

源码地址: 

 can2apple/kubi (github.com)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值