1
A
回答
0
这取决于协议的一些光,这取决于代理,它依赖于透明度是否是一个目标。详尽地解决所有这些问题将会花费很长时间,所以让我们考虑一个简单的案例。
网络连接是软件通常由某种句柄(无论是文件描述符还是其他资源)来表示。在POSIX系统上的C程序中,我们可以简单地保持相互关联的两个文件描述符:
struct proxy_session {
int client_fd;
int server_fd;
}
这是裸最低要求。
当客户端连接时,我们分配其中一个结构。可能有一个协议让我们知道我们应该使用什么后端,或者我们可能会做负载平衡和自己挑选后端。
一旦我们选择了一个后端(无论是通过解析协议还是通过做出一些表单路由决定),我们都会启动一个连接。简单地说,代理(作为中介)只是在客户端和服务器之间转发数据包。
我们可以使用任意数量的接口将这两件事绑在一起。例如,在Linux上,epoll(2)
允许我们将指针关联到文件描述符上的事件。我们可以为它提供一个指向我们的proxy_session
结构的指针,用于客户端和服务器端。当数据进入这些文件描述符时,我们知道在哪里映射它。我们必须有一种区分连接句柄的手段(不管它们是文件描述符,指针还是其他表示形式),因此缺少这样的接口是不够的。然后,我们可以使用像散列表这样的结构来查找句柄的目的地。通过简单地区分彼此之间的连接,并保持一些将两个连接“粘合”在一起的状态,就可以找到解决方案。
相关问题
- 1. 会话对象包含哪些内容?
- 2. Chrome中的会话详细信息
- 3. IE8失去会话详细信息
- 4. 新会话登录详细信息
- 5. JPA persistence.xml文件内容详细信息
- 6. 哪个msi数据库包含产品类型详细信息?
- 7. Crystal Reports详细信息详细信息
- 8. Android主详细信息详细信息
- 9. 在MVC视图中访问一些会话详细信息
- 10. 示例主详细信息视图 - 详细信息片段更改内容
- 11. PartCover代码详细信息
- 12. PushViewController详细信息?
- 13. 详细信息sql
- 14. UITableView详细信息
- 15. IMAP_AirSeatMapService详细信息
- 16. “关于”对话框中包含哪些重要信息?
- 17. 检索从露天休息API的内容详细信息API
- 18. NSIS在显示详细信息后隐藏详细信息
- 19. 哪个表格包含课程的链接媒体详细信息?
- 20. 存储库应包含哪些内容?
- 21. OSGI库中可包含哪些内容
- 22. 主要功能包含哪些内容?
- 23. CanExecute中应该包含哪些内容?
- 24. MEF 2包含哪些内容?
- 25. 哪里可以保存EmberJS应用程序的详细用户会话信息?
- 26. magento保存管理详细信息
- 27. Google地点详细信息不包含任何活动
- 28. 拆分页的详细信息包含许多数据
- 29. Cruise Control.NET电子邮件不包含错误的详细信息
- 30. 环内循环(更多详细信息)
感谢您的详细信息。所以基本上这意味着,对于每个传入客户端连接代理,它将打开一个到后端服务器的新连接并保持一对一映射。如果它打开到后端的单个连接,那么除了检查数据包本身外,没有办法区分。 – Sammy
如果您多路复用,代理协议必须提供一些区分手段。请求序列化就是这样的一种方法。 – dho