php - 我需要一个脚本/应用程序来保持 PHP 前端的 TCP 连接

标签 php sockets proxy networking tcp

我正在使用基于 TCP 的自定义协议(protocol)为后端服务器制作 PHP 前端。由于建立与后端服务器的连接时握手相当复杂,我想保持与后端服务器的 TCP 连接。自然地,考虑到 HTTP 固有的无状态特性(尤其是在 Apache 下使用 mod_php 时),我不能直接在 PHP 中执行此操作。

我正在考虑拥有一个本地“代理服务器”,维护一个到后端服务器的连接池。 PHP 前端的每个用户维护他/她自己与后端服务器的连接是很重要的。现在,这不是一个非常复杂的程序,但由于网络编程的许多缺陷,我宁愿使用一个健壮的、成熟的应用程序来做这样的事情。

我正在考虑连接到代理服务器的 PHP 应用程序,声明“我有一个 ID;123”,从那时起,进出服务器的所有内容都直接在 PHP 前端和后端服务器。

对于优雅的解决方案有什么建议吗?

谢谢!

最佳答案

这是一个想法,尽管它的扩展性可能不是特别好:

基本思想是您希望以某种方式代理这些原始套接字连接,以便与后端系统保持连接。

假设您有一个程序创建到后端系统的远程连接,然后在前端服务器的某个特殊目录中创建域套接字(fifo),并命名该域套接字在用户的 session_id 之后。这个过程只是代理两个连接之间的通信。

我不确定我将如何设计这样的代理。您可能会用 PHP 编写一个可以处理它的守护进程(提示:您可能想查看一些 php 守护进程的框架,如 nanoserv 或 System_Deamon)——不太可能非常高效——但可能工作正常。如果你有非常多的连接,你可能想要使用线程来避免为每个连接使用 fork()ing。

但基本思想是,对于与后端系统的每个打开的连接,都有一些进程公开本地域套接字,您的前端 PHP 脚本可以与之对话。那些前端、网络绑定(bind)的进程知道哪个套接字,因为它是以当前 session_id 命名的。

设置/拆除这些连接的方式和时间可能在很大程度上取决于您的情况。您需要某种方法让 Web 绑定(bind)进程请求套接字(此时代理守护进程进行设置/握手,打开本地域套接字,并开始代理),以及一些关闭它们的策略。

关于php - 我需要一个脚本/应用程序来保持 PHP 前端的 TCP 连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3729274/

相关文章:

php - HTML 表单不发布或检索值

PHP Autoloader 在 Ubuntu 生产服务器上不起作用

node.js - nginx 中的 socket.io 问题

ios - React Native - 后台模式下的 Web Socket

java - 使用反向代理将 Apache (2.4) SSL 站点加载到 Tomcat (6.0) 时出现问题

linux - 我从 git 中删除代理但仍然显示错误如何解决?

php - 如何使用 zend2 和 dompdf 创建 pdf

PHP:简单的 HTML DOM 解析器 - find() 中的多个属性?

c++ - 如何将客户端内部创建的类的对象传递给服务器?

node.js - 如何将数据从第一个服务器发送到其他服务器并在第一个服务器中获取其他服务器响应?