惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Simon Willison's Weblog
Simon Willison's Weblog
Help Net Security
Help Net Security
P
Privacy International News Feed
T
Threat Research - Cisco Blogs
C
Cisco Blogs
C
CERT Recently Published Vulnerability Notes
NISL@THU
NISL@THU
L
LINUX DO - 热门话题
Security Latest
Security Latest
A
Arctic Wolf
G
GRAHAM CLULEY
月光博客
月光博客
S
Securelist
D
Docker
J
Java Code Geeks
T
Troy Hunt's Blog
T
Tenable Blog
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
SecWiki News
SecWiki News
S
Security @ Cisco Blogs
量子位
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
L
LINUX DO - 最新话题
Recent Commits to openclaw:main
Recent Commits to openclaw:main
aimingoo的专栏
aimingoo的专栏
博客园 - 【当耐特】
H
Heimdal Security Blog
The Hacker News
The Hacker News
博客园 - 三生石上(FineUI控件)
Application and Cybersecurity Blog
Application and Cybersecurity Blog
N
Netflix TechBlog - Medium
Vercel News
Vercel News
Forbes - Security
Forbes - Security
B
Blog RSS Feed
H
Hackread – Cybersecurity News, Data Breaches, AI and More
IT之家
IT之家
B
Blog
MongoDB | Blog
MongoDB | Blog
博客园 - 聂微东
Google DeepMind News
Google DeepMind News
S
Secure Thoughts
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
C
Check Point Blog
云风的 BLOG
云风的 BLOG
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
T
The Blog of Author Tim Ferriss
L
Lohrmann on Cybersecurity
F
Full Disclosure
D
Darknet – Hacking Tools, Hacker News & Cyber Security
P
Proofpoint News Feed

博客园 - Lil-K

VM-16-pro 安装Centos Stream 9 spring-cloud-alibaba-整合spring-cloud-gateway-3.1.4 基于CentOS7.x安装Nginx-1.18.0 Nginx在Windows下的基本介绍安装以及基本使用 window7下 cmd命令行 Mysql导出表结构 + 表数据 【一】Spark基础 【二】Spark 核心 【八】将日志写入log(glog) - Lil-K - 博客园 【七】ab压测 【五】安装fcig - Lil-K - 博客园 【四】搭建Nginx服务器 - Lil-K - 博客园 【三】多语言互通 - Lil-K - 博客园 【二】调通单机版的thrift-C++版本 - Lil-K - 博客园 【一】调通单机版的thrift-python版本 - Lil-K - 博客园 Spark在实际项目中分配更多资源 - Lil-K - 博客园 Spark实际项目中调节并行度 - Lil-K - 博客园 IDEA中大小写转换快捷键 使用maven下载cdh版本的大数据jar包 【Hive六】Hive调优小结 - Lil-K - 博客园
【六】tf和cgi进行联合试验,完成日志服务器 - Lil-K - 博客园
Lil-K · 2018-08-15 · via 博客园 - Lil-K

【任务6】tf和cgi进行联合试验,完成日志服务器

改装gen-cpp目录下client.cpp文件

  • 代码如下:
#include "RecSys.h"
#include <iostream>
#include <string>

#include <transport/TSocket.h>
#include <transport/TBufferTransports.h>
#include <protocol/TBinaryProtocol.h>

#include <fcgi_stdio.h>
#include <fcgiapp.h>

using namespace apache::thrift;
using namespace apache::thrift::protocol;
using namespace apache::thrift::transport;

using namespace std;
using std::string;
using boost::shared_ptr;

inline void send_response(
            FCGX_Request& request, const std::string& resp_str) {

    FCGX_FPrintF(request.out, "Content-type: text/html;charset=utf-8\r\n\r\n");
    FCGX_FPrintF(request.out, "%s", resp_str.c_str());
    FCGX_Finish_r(&request);
}

int main(int argc, char **argv){
    // 1.初始化cgi
    FCGX_Init();
    FCGX_Request request;
    FCGX_InitRequest(&request, 0, 0);

    // 2.连接connect server rpc
    boost::shared_ptr<TSocket> socket(new TSocket("localhost",9090));
    boost::shared_ptr<TTransport> transport(new TBufferedTransport(socket));
    boost::shared_ptr<TProtocol> protocol(new TBinaryProtocol(transport));

    transport->open();

    RecSysClient client(protocol);
    
    while(FCGX_Accept_r(&request) >= 0) {
	
        // http page -> client
        std::string send_data = FCGX_GetParam("QUERY_STRING", request.envp);

            string receive_data;
        
        // client >> server
        // server >> client
    	client.rec_data(receive_data,send_data);

    	cout << "receive http params: " << send_data << std::endl;
    	cout << "receive server data: " << receive_data << endl;

        /*send_response(request, return_str);*/
        send_response(request, receive_data);
    }

    transport->close();
    return 0;
}

启动Nginx服务和gen-cpp目录下编译后的"server"

  • client.cpp文件代码修改为:
#include "RecSys.h"
#include <iostream>
#include <string>

#include <transport/TSocket.h>
#include <transport/TBufferTransports.h>
#include <protocol/TBinaryProtocol.h>

#include <fcgi_stdio.h>
#include <fcgiapp.h>

using namespace apache::thrift;
using namespace apache::thrift::protocol;
using namespace apache::thrift::transport;

using namespace std;
using std::string;
using boost::shared_ptr;

inline void send_response(
            FCGX_Request& request, const std::string& resp_str) {

    FCGX_FPrintF(request.out, "Content-type: text/html;charset=utf-8\r\n\r\n");
    FCGX_FPrintF(request.out, "%s", resp_str.c_str());
    FCGX_Finish_r(&request);
}

int main(int argc, char **argv){
    // 1.初始化cgi
    FCGX_Init();
    FCGX_Request request;
    FCGX_InitRequest(&request, 0, 0);

    // 2.连接connect server rpc
    boost::shared_ptr<TSocket> socket(new TSocket("localhost",9090));
    boost::shared_ptr<TTransport> transport(new TBufferedTransport(socket));
    boost::shared_ptr<TProtocol> protocol(new TBinaryProtocol(transport));

    transport->open();

    RecSysClient client(protocol);
    
    while(FCGX_Accept_r(&request) >= 0) {
	
	// http page -> client
	std::string send_data = FCGX_GetParam("QUERY_STRING", request.envp);

    	string receive_data;
	
	// client >> server
	// server >> client
    	client.rec_data(receive_data,send_data);

    	cout << "receive http params: " << send_data << std::endl;
    	cout << "receive server data: " << receive_data << endl;

        /*send_response(request, return_str);*/
        send_response(request, receive_data);
    }

    transport->close();
    return 0;
}

Makefile 文件修改为

G++ = g++
CFLAGS = -g -Wall
INCLUDES = -I./ -I/usr/local/include/thrift
LIBS = -L/usr/local/lib/*.so -lthrift

SER_OBJECT = RecSys.cpp RecSys_constants.cpp RecSys_types.cpp RecSys_server.skeleton.cpp
CLI_OBJECT = RecSys.cpp client.cpp

server: $(SER_OBJECT)
	$(G++) $(CFLAGS) $(INCLUDES) $(SER_OBJECT) $(LIBS) -o server

client: $(CLI_OBJECT)
	$(G++) $(CFLAGS) $(INCLUDES) $(CLI_OBJECT) $(LIBS) -o client

.PHONY: clean
clean:
	rm -f server client
  • 命令:make servermake clientmake clean等会对应执行名相应的命令

启动Nginx服务

  • 命令:安装目录/sbin/nginx
  • 检查端口是否开启:netstat -antup | grep nginx,端口为:80
  • 打开浏览器查看服务是否开启,查看

启动gen-cpp目录下的"server"

  • 命令:./server
  • 此时已经启动了cgi代理,查看端口是否监听成功:netstat -antup | grep 8088

启动cgi服务

  • 启动之前先编译client.cpp文件,命令:make client

  • 命令:/usr/local/src/nginx/sbin/spawn-fcgi -a 127.0.0.1 -p 8088 -f /test/thrift_test/python_thrift_demo/gen-cpp/client

查看整个流程的服务是否成功

  • 打开浏览器,查看,页面(也就是客户端)会返回server端输出的内容,同时server端会接收到客户端(也就是浏览器)发送的信息

  • 如图:

  • 带参数:

    • 客户端:

    • server端: