• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • MsSql
  • Mysql
  • oracle
  • MariaDB
  • DB2
  • SQLite
  • PostgreSQL
  • MongoDB
  • Redis
  • Access
  • 数据库其它
  • sybase
  • HBase
您的位置:首页 > 数据库 >Mysql > 使用mysql_udf与curl库完成http_post通信模块示例

使用mysql_udf与curl库完成http_post通信模块示例

作者: 字体:[增加 减小] 来源:互联网 时间:2017-05-11

通过本文主要向大家介绍了mysql udf,mysql udf提权,mysql udf http,mysql udf redis,udf是什么滤芯等相关知识,希望本文的分享对您有所帮助

使用mysql_udf与curl库完成http_post通信模块(mysql_udf,multi_curl,http,post)

这个模块其目前主要用于xoyo江湖的sns与kingsoft_xoyo自主研发的TCSQL数据库做数据同步,当有feed插入sns数据库,使用触 发器调用该模块,向tcsql数据库发送同步数据。也可以使用该模块与其它使用socket接口的数据库或程序做转发与同步。
http_post模块主要使用mysql_udf接口,与curl库两部分技术。
mysql_udf是mysql为c语言提供的一个接口,通过这个接口,用户可以自定义mysql的函数,通过调用这些mysql函数,调用相应的c语言 模块来执行特定功能,实现mysql数据与外部应用的交互。curl库是一个比较常用的应用层网络协议库,主要用到的是其中的curl_multi异步通 信api,用来进行网络传输。
首先参考mysql官方提供的udf_example.c文件,建立3个主要的接口函数,分别是初始化函数,执行函数与析构函数。

在mysql_udf接口中,主函数体中是不允许使用new或malloc动态分配内存,所以如果需要申请内存空间,必须用xxxx_init()函数申 请并将申请的地址赋给initid->ptr指针,然后在主函数体中使用,并在xxxx_deinit析构函数体中释放。另外对于 mysql_udf接口的调用好像当并发量超过一定程度,如果是使用动态分配内存,会出现double free的错误,为了避免这个错误,所以在我的程序里使用静态空间与动态申请空间相结合的方式,这样如果数据较小,并发量较大,不会出现double free错误。对于静态申请空间,最大约在160000~170000byte左右,我这里使用的160000,当mysql传送的数据大于这个数的时 候,才动态申请内存。初始化函数体如下:

      if(args->arg_count == 2 && args->args[1]!=NULL)
      {
            int flexibleLength = strlen(args->args[1]); 

        if(flexibleLength > 160000)
        {
            int allocLength = 200 + flexibleLength;
            if (!(initid->ptr=(char*) malloc(allocLength) ) )
            {
                    strcpy(message,"Couldn't allocate memory in http_post_init");
                    return 1;
            }
            return 0;
        }
        else
        {
            initid->ptr=NULL;
        } 

      }
       return 0; 

    }
</div>
其中http_post_init需要返回my_bool型。这个函数目的是给用户提供一个方式,检验由mysql参数传进来的数据是否正确,如果正确则 返回0,则mysql会自动调用定义的主函数,如果返回1,则mysql打印message信息退出,不会调用主函数。所以在设定返回值的时候一定注意。

主函数如下:

    char sendArray[160000] = "\0";//can not move this into the if
    if(initid->ptr == NULL)
    {
        //char sendArray[160000] = "\0";//error
        sendBuffer=sendArray;
    }
    else
    {
        sendBuffer = initid->ptr;
        TRY_TIMES=100;
    } 

    strcpy(sendBuffer,args->args[1]);
    curl = curl_easy_init();
    multi_handle = curl_multi_init();
    if(curl && multi_handle)
    {
        /* what URL that receives this POST */
        curl_easy_setopt(curl, CURLOPT_URL,args->args[0]);
        curl_easy_setopt(curl, CURLOPT_HTTPPOST, 1);
        curl_easy_setopt(curl,CURLOPT_POSTFIELDS,sendBuffer);
        curl_multi_add_handle(multi_handle, curl);
        while(CURLM_CALL_MULTI_PERFORM == curl_multi_perform(multi_handle,\ &still_running));
        while(still_running && times< TRY_TIMES)
         {
              int rc;      //select() return code
              int maxfd;
              fd_set fdread;
              fd_set fdwrite;
              fd_set fdexcep;
              FD_ZERO(&fdread);
              FD_ZERO(&fdwrite);
  &nbs

分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • mysql中使用UDF自动同步memcached效率笔记
  • Linux利用UDF库实现Mysql提权
  • mysql的udf编程之非阻塞超时重传
  • 使用mysql_udf与curl库完成http_post通信模块示例

相关文章

  • 2018-12-05SQL Server复制功能要避开缺陷的干扰小结
  • 2018-12-05Mysql分析-常用分析语句总结
  • 2018-12-05MySQL 最基本的SQL语法/语句
  • 2017-05-11mysql创建内存表的方法
  • 2018-12-05Oracle常用命令大全集
  • 2018-12-05mysql的索引优化如何使用
  • 2018-12-05sql数据库批量处理脚本
  • 2018-12-05MySQL数据库优化(五)—MySQL查询优化
  • 2017-05-11Windows下MySql错误代码1045的解决方法
  • 2018-12-05MySQL索引的索引长度问题具体介绍

文章分类

  • MsSql
  • Mysql
  • oracle
  • MariaDB
  • DB2
  • SQLite
  • PostgreSQL
  • MongoDB
  • Redis
  • Access
  • 数据库其它
  • sybase
  • HBase

最近更新的内容

    • PHP函数使用说明(补充)
    • mysql 卡死 大部分线程长时间处于sending data的状态
    • MYSQL常用命令与实用技巧
    • mysql的校对规则引起的问题分析
    • 优化MySQL数据库中的查询语句详解
    • Mysql 插入中文及中文查询 (修改+调试)
    • MySQL视图的应用之修改视图
    • Mysql原先内容不改变并在后面增加内容的sql语句详解
    • php 闭包实例解析
    • Linux系统下mysqlcheck修复数据库命令

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有