我需要创建一个C ++ FastCGI服务器并以最简单的方式连接到它,以便进行增量测试/开发。
从概念上来说,我既有问题,也缺少FastCGI的API文档。我的理解是,当我做
FCGX_Request request;
FCGX_Init();
FCGX_InitRequest(&request, 0, 0);
while (FCGX_Accept_r(&request) == 0) {
}
这将打开一个套接字,并在其上侦听请求。然后,使用boost :: asio,我想做类似的事情
boost::asio::io_service io_service;
boost::system::error_code error;
using boost::asio::ip::tcp;
tcp::resolver resolver(io_service);
tcp::resolver::query query("localhost", "" /* WTF are the params here? */);
tcp::resolver::iterator endpoint_iterator = resolver.resolve(query);
tcp::socket socket(io_service);
boost::asio::connect(socket, endpoint_iterator);
while (true)
{
boost::array<char, 128> buf;
size_t len = socket.read_some(boost::asio::buffer(buf), error);
if (error)
break;
}
CPPUNIT_ASSERT_EQUAL(error, (boost::system::error_code)boost::asio::error::eof);
即以编程方式将请求发送到FastCGI流程以测试其是否正常运行。
无论如何,我相信tcp :: resolver :: query是通过我的简单单元测试建立通信的关键。
然而,
我不完全了解这种情况下的“套接字”是什么。我读过它只是一个文件(在Linux上)?
鉴于此,我怎么知道FastCGI正在监听什么套接字?
如何指定用于boost :: asio的套接字?
测试完成后,如何停止FastCGI进程监听?
我可能会解决所有这些错误,因此很感谢接受有关处理此简单测试用例的正确方法的任何提示。另外,如果有人知道fcgi / fcgi ++ / fastcgi ++的API文档在哪里,那真是太棒了。
最佳答案
您的问题实际上仅涉及基本网络。
编辑查看有关网络编程的最有价值的Internet资源(从基础到高级):
What is a socket?来自Beej的网络编程指南
套接字是一种连接。服务器正在/ port /(TCP或UDP。
其余部分使用TCP,因为您正在执行CGI)。
客户端连接到端口,而服务器accept
建立连接,从而形成一个套接字(可以说是双向流)。现在,客户端(通常)为send
,服务器为receive
。然后服务器send
响应。 (根据协议/首选项,连接可以关闭,也可以保持活动状态)。
具体答案:
query("localhost", "http");
最终将连接到大多数系统上的端口80。
当然,您也可以只在此处指定端口号:
query("localhost", "8080");
选择服务器绑定到其侦听器的端口号。
关于c++ - FastCGI和boost::asio用于单元测试,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21664303/