2

我在网络编程方面相对较新。我编写了一个生成 HTML 页面的小型 C++ 服务器。如果我理解正确的话,fastcgi 方法如下:

                         |                    Site1
                         |  +------------+   +--------------+   +-------------+
                         |--|Apache/nginx|---|fastcgi socket|---|My C++ server|
                         |  +------------+   +--------------+   +-------------+
                       ........................................................
                         |                    Site2                             
   +-----------------+   |  +------------+   +--------------+   +-------------+
===|TCP from Internet|===|--|Apache/nginx|---|fastcgi socket|---|My C++ server|
   +-----------------+   |  +------------+   +--------------+   +-------------+
                         |
                         | <-firewall

我的理解如下,如有错误请指正

  1. 步骤是有人打开一个 Tcp/Http 套接字到一个众所周知的地址,例如。http://www.example.com
  2. 一个防火墙的东西,所以一个背靠背的用户代理说,他是 example.com,在 web 服务器之间做一些流量路由
  3. 防火墙打开另一个套接字到记录访问和其他事情的 Web 服务器(Apache/nginx)。
  4. Web 服务器为我的 C++ 服务器打开一个新套接字
  5. 我的 C++ 服务器获得了 fastcgi 套接字,我接受了连接,然后开始轮询该连接上的 i/o 事件
  6. 当数据到达该 fastcgi 连接时,我读取它并将内容解析为 HTTP 标头和 HTTP 有效负载

所以我的问题是如何进行身份验证或用其他方式识别用户?那么1个连接是1个用户是真的吗?我应该在处理登录/注销状态的每个连接上启动状态机吗?因此,当接受新连接时,状态为“注销”,我发回注册表,当我获得用户/通过连接状态步骤以“登录”时,服务器发送个性化内容。

我的 C++ 服务器基于server1 - 一个 C++ 网络服务器/客户端框架

4

1 回答 1

2

你的问题需要一本书的答案。

5 和 6 是正确的,但 Web 服务器会处理所有这些。

你真的应该专注于一个可以实现的小目标。让我们从 fastcgi 身份验证开始。使用“authentication Cookies”进行搜索,这应该可以让您从答案的一部分开始。

于 2013-05-25T01:23:04.937 回答