昨天需要一个线下脚本进行单播推送,大约有1kw个用户,考虑到推送速度就临时搞了个请求线上的一个脚本
/** * 临时支持invoke单播推送 */ #include <stdio.h> #include <stdlib.h> #include <string.h> #include <pthread.h> #include "ghttp.h" #include "log.h" //调试模式 #define DEBUGS //最大线程数 #define MAX_THREADS 30 #ifndef DEBUGS char *global_uri = "xxx"; #else char *global_uri = "xxx"; #endif struct active_t{ pthread_mutex_t active_mutex; pthread_cond_t active_cond; int active; }active_struct; const char *global_request_conf = "conf/request.conf"; void *work_fun(void *arg); static void _init_main(){ open_log(); print_log(DEBUG, "%s", "start..."); } static void _shut_down(){ print_log(DEBUG, "%s", "end..."); close_log(); } static void error_die(const char *msg){ perror(msg); exit(1); } /** * 请求mapi */ int mapi_push(char *data, char *ret, int ret_len){ ghttp_request *request = NULL; request = ghttp_request_new(); ghttp_set_uri(request, global_uri); ghttp_set_type(request, ghttp_type_post); ghttp_set_header(request, http_hdr_Connection, "close"); ghttp_set_header(request, http_hdr_Content_Type, "application/x-www-form-urlencoded"); ghttp_set_body(request, data, strlen(data)); ghttp_prepare(request); int status = ghttp_process(request); if(status == ghttp_error){ return -1; } memset(ret, 0, ret_len); strncpy(ret, ghttp_get_body(request), ghttp_get_body_len(request)); ret[strlen(ret)] = '