国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數(shù)據(jù)庫 > MySQL > 正文

使用mysql_udf與curl庫完成http_post通信模塊示例

2024-07-24 12:47:32
字體:
供稿:網(wǎng)友

使用mysql_udf與curl庫完成http_post通信模塊(mysql_udf,multi_curl,http,post)

這個(gè)模塊其目前主要用于xoyo江湖的sns與kingsoft_xoyo自主研發(fā)的TCSQL數(shù)據(jù)庫做數(shù)據(jù)同步,當(dāng)有feed插入sns數(shù)據(jù)庫,使用觸 發(fā)器調(diào)用該模塊,向tcsql數(shù)據(jù)庫發(fā)送同步數(shù)據(jù)。也可以使用該模塊與其它使用socket接口的數(shù)據(jù)庫或程序做轉(zhuǎn)發(fā)與同步。
http_post模塊主要使用mysql_udf接口,與curl庫兩部分技術(shù)。
mysql_udf是mysql為c語言提供的一個(gè)接口,通過這個(gè)接口,用戶可以自定義mysql的函數(shù),通過調(diào)用這些mysql函數(shù),調(diào)用相應(yīng)的c語言 模塊來執(zhí)行特定功能,實(shí)現(xiàn)mysql數(shù)據(jù)與外部應(yīng)用的交互。curl庫是一個(gè)比較常用的應(yīng)用層網(wǎng)絡(luò)協(xié)議庫,主要用到的是其中的curl_multi異步通 信api,用來進(jìn)行網(wǎng)絡(luò)傳輸。
首先參考mysql官方提供的udf_example.c文件,建立3個(gè)主要的接口函數(shù),分別是初始化函數(shù),執(zhí)行函數(shù)與析構(gòu)函數(shù)。

復(fù)制代碼 代碼如下:

//args是sql語句傳回的參數(shù),message是返回出錯信息使用這些都是規(guī)定好的。
my_bool http_post_init(UDF_INIT *initid, UDF_ARGS *args, char *message);
//主函數(shù)體
longlong http_post(UDF_INIT *initid, UDF_ARGS *args, char *is_null,char *error);
//析構(gòu)函數(shù)體
void http_post_deinit(UDF_INIT *initid);
//args是sql語句傳回的參數(shù),message是返回出錯信息,使用這些都是規(guī)定好的。
//初始化函數(shù)體 my_bool http_post_init(UDF_INIT *initid, UDF_ARGS *args, char *message);
//主函數(shù)體 longlong http_post(UDF_INIT *initid, UDF_ARGS *args, char *is_null,char *error);
//析構(gòu)函數(shù)體 void http_post_deinit(UDF_INIT *initid);

在mysql_udf接口中,主函數(shù)體中是不允許使用new或malloc動態(tài)分配內(nèi)存,所以如果需要申請內(nèi)存空間,必須用xxxx_init()函數(shù)申 請并將申請的地址賦給initid->ptr指針,然后在主函數(shù)體中使用,并在xxxx_deinit析構(gòu)函數(shù)體中釋放。另外對于 mysql_udf接口的調(diào)用好像當(dāng)并發(fā)量超過一定程度,如果是使用動態(tài)分配內(nèi)存,會出現(xiàn)double free的錯誤,為了避免這個(gè)錯誤,所以在我的程序里使用靜態(tài)空間與動態(tài)申請空間相結(jié)合的方式,這樣如果數(shù)據(jù)較小,并發(fā)量較大,不會出現(xiàn)double free錯誤。對于靜態(tài)申請空間,最大約在160000~170000byte左右,我這里使用的160000,當(dāng)mysql傳送的數(shù)據(jù)大于這個(gè)數(shù)的時(shí) 候,才動態(tài)申請內(nèi)存。初始化函數(shù)體如下:

復(fù)制代碼 代碼如下:

my_bool http_post_init(UDF_INIT *initid, UDF_ARGS *args, char *message)
    {
      if (args->arg_count != 2)
      {
        strcpy(message,"Wrong arguments to http_post; ");
        return 1;
      } 

發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 平度市| 剑川县| 鄯善县| 长武县| 珠海市| 克什克腾旗| 炎陵县| 富源县| 黑水县| 牡丹江市| 广安市| 台前县| 桂林市| 阿瓦提县| 东乌珠穆沁旗| 个旧市| 古交市| 古丈县| 托克逊县| 隆尧县| 安庆市| 大同县| 永靖县| 葵青区| 满洲里市| 贡觉县| 淮阳县| 峨山| 乌兰浩特市| 陵水| 新兴县| 星子县| 南丰县| 贞丰县| 云龙县| 济源市| 九江市| 鹤峰县| 无棣县| 长治县| 永靖县|