我在网络编程方面相对较新。我编写了一个生成 HTML 页面的小型 C++ 服务器。如果我理解正确的话,fastcgi 方法如下:
| Site1
| +------------+ +--------------+ +-------------+
|--|Apache/nginx|---|fastcgi socket|---|My C++ server|
| +------------+ +--------------+ +-------------+
........................................................
| Site2
+-----------------+ | +------------+ +--------------+ +-------------+
===|TCP from Internet|===|--|Apache/nginx|---|fastcgi socket|---|My C++ server|
+-----------------+ | +------------+ +--------------+ +-------------+
|
| <-firewall
我的理解如下,如有错误请指正
- 步骤是有人打开一个 Tcp/Http 套接字到一个众所周知的地址,例如。http://www.example.com
- 一个防火墙的东西,所以一个背靠背的用户代理说,他是 example.com,在 web 服务器之间做一些流量路由
- 防火墙打开另一个套接字到记录访问和其他事情的 Web 服务器(Apache/nginx)。
- Web 服务器为我的 C++ 服务器打开一个新套接字
- 我的 C++ 服务器获得了 fastcgi 套接字,我接受了连接,然后开始轮询该连接上的 i/o 事件
- 当数据到达该 fastcgi 连接时,我读取它并将内容解析为 HTTP 标头和 HTTP 有效负载
所以我的问题是如何进行身份验证或用其他方式识别用户?那么1个连接是1个用户是真的吗?我应该在处理登录/注销状态的每个连接上启动状态机吗?因此,当接受新连接时,状态为“注销”,我发回注册表,当我获得用户/通过连接状态步骤以“登录”时,服务器发送个性化内容。
我的 C++ 服务器基于server1 - 一个 C++ 网络服务器/客户端框架