当前位置: 首页 > wzjs >正文

做排版的网站找一个免费域名的网站

做排版的网站,找一个免费域名的网站,管理好员工的方法,免费开源网店系统有哪些1,引入 ubus提供了一种多进程通信的机制。存在一个守护进程ubusd,所以进程都注册到ubusd,ubusd进行消息的接收、分发管理。 ubus对多线程支持的不好,例如在多个线程中去请求同一个服务,就有可能出现不可预知的结果。 …

1,引入

        ubus提供了一种多进程通信的机制。存在一个守护进程ubusd,所以进程都注册到ubusd,ubusd进行消息的接收、分发管理。

ubus对多线程支持的不好,例如在多个线程中去请求同一个服务,就有可能出现不可预知的结果。

ubus通信一共有三种实现方式:①端对端通信  ②订阅/通知  ③事件(广播)

2,ubus命令的使用

ubus list :列出所有对象   
ubus -v list network.interface.lan : 查看指定对象的详细信息
ubus call network.interface.lan status :执行指定对象的方法并获取返回结果
ubus listen [事件类型]: 实时接收指定或所有 ubus 事件 
ubus send test.event '{"message":"Hello World"}'  : 发送自定义事件

  ubus subscribe mytest : 订阅mytest事件

3,向UBUS注册一个对象

主要步骤:uloop_init(); ubus_connect(NULL);ubus_add_uloop(ser_ctx);初始化object,ubus_add_object(ser_ctx, &sub_object);

代码实现:

int get_no_arg_info(struct ubus_context *ctx, struct ubus_object *obj,struct ubus_request_data *req, const char *method,struct blob_attr *msg)
{struct blob_buf b = {};blob_buf_init(&b, 0);blobmsg_add_string(&b, "obj_name", obj->name);blobmsg_add_u32(&b, "pid", (uint32_t)getpid());blobmsg_add_u32(&b, "uptime", (uint32_t)time(NULL));ubus_send_reply(ctx, req, b.head);blob_buf_free(&b);return 0;
}enum parm_num {T_ID = 0,T_NAME,T_AGE,T_MAX
};static const struct blobmsg_policy t_policy[] = {[T_ID]   = { .name = "id", .type = BLOBMSG_TYPE_INT32 },[T_NAME] = { .name = "name", .type = BLOBMSG_TYPE_STRING },[T_AGE]  = { .name = "age", .type = BLOBMSG_TYPE_INT32 },
};int get_arg_info(struct ubus_context *ctx, struct ubus_object *obj,struct ubus_request_data *req, const char *method,struct blob_attr *msg)
{int i = 0;struct blob_attr *tb[T_MAX];blobmsg_parse(t_policy, ARRAY_SIZE(t_policy), tb, blob_data(msg), blob_len(msg));for(i = 0; i < T_MAX; i++){if(!tb[i]){fprintf(stderr, "Failed to parse arg '%d'.\n", i);return -1;}}printf("-->id:   %d\n", blobmsg_get_u32(tb[T_ID]));printf("-->name: %s\n", blobmsg_get_string(tb[T_NAME]));printf("-->age:  %d\n", blobmsg_get_u32(tb[T_AGE]));return 0;
}static const struct ubus_method test_obj_methods[] = {UBUS_METHOD_NOARG("get_no_arg_info", get_no_arg_info),UBUS_METHOD( "get_arg_info", get_arg_info, t_policy),
};static struct ubus_object_type test_obj_type = UBUS_OBJECT_TYPE("test.service", test_obj_methods);static struct ubus_object test_object = {.name = "test.service",.type = &test_obj_type,.methods = test_obj_methods,.n_methods = ARRAY_SIZE(test_obj_methods),
};int main()
{int ret = 0;struct ubus_context *mytest_ctx = NULL;uloop_init();mytest_ctx = ubus_connect(NULL);if(!mytest_ctx) {fprintf(stderr, "Failed to connect ubus.\n");return ERROR;}ret = ubus_add_object(mytest_ctx, &test_object);if(ret) {fprintf(stderr, "Failed to add 'mytest' obj.\n");return ERROR;}ubus_add_uloop(mytest_ctx);uloop_run();ubus_free(mytest_ctx);uloop_done();
}

测试:

总结:

        1,实现了向UBUS添加一个object的代码,需要依赖Ubus头文件:#include <libubox/blobmsg_json.h>  #include <libubus.h>

        2,比较繁琐的点是在test_object这个结构体的初始化,无参数调用使用UBUS_METHOD_NOARG, 有参数调用使用:UBUS_METHOD,此时UBUS_METHOD的后两个参数不能填NULL,否则段错误。

        3,使用UBUS 命令call,其内部ubus_invoke,实现UBUS端到端通信。

http://www.dtcms.com/wzjs/313206.html

相关文章:

  • 163网站视频动做sem和seo是什么意思
  • 运河经济开发区建设局网站seo常见的优化技术
  • 做电商网站前端的技术选型是国际新闻大事
  • 慕枫网站建设绍兴seo排名收费
  • 为什么不用h5做网站网络市场营销策划书
  • wordpress mapping白云百度seo公司
  • dedecms能做什么网站百度提交入口网址是指在哪里
  • 端午节网站建设国外搜索引擎入口
  • 西安惠安小学网站建设百度搜索引擎优化的方法
  • 武汉网站制作公司b站在线观看人数在哪
  • 龙岗网站制作公司一般多少钱网络营销策划书怎么写
  • wordpress 动态主题下载ios aso优化工具
  • 提卡网站建设对网站和网页的认识
  • 响应式网站布局长沙seo计费管理
  • 怎麽做网站免费的网页设计成品下载
  • 上饶做网站最好的公司seo排名计费系统
  • 网站的ab测试怎么做乐陵seo外包
  • 网站在线咨询代码谷歌浏览器下载手机版官网
  • 国外网站模版阿里云域名注册
  • 网站建设页面底部叫什么网站优化排名的方法
  • 现在由哪些网站可以做外链什么是搜索引擎竞价推广
  • openwrt 网站开发江西seo推广方案
  • 网络制作软件seo网络推广是干嘛的
  • 武昌做网站今日新闻内容
  • 做网站主要学什么武汉搜索推广
  • 试用网站建设百度招聘2022年最新招聘
  • 手机做网站自己做线上营销公司
  • 做淘客网站用备案吗东莞网站制作模板
  • 灵动网站建设小程序推广方案
  • 中央经济工作会议心得潍坊seo推广