我有一个问题困扰了我将近 24 小时,此时此刻我不知道该如何解决。
事情是这样的:我想在我的服务器上有一个“主”套接字来处理所有传入的数据并使用 PHP 将其发送到其他客户端。那部分没问题,但我想使用多个子域连接到那个套接字,例如ex.example.com。问题是,除非你有一个套接字在上面运行,否则你无法连接到那个子域,而这只会填满你的端口,而这正是我试图阻止的。
最好的解决方案是让 Apache 处理传入的 TCP 请求,将数据保存在您正在连接的域上,然后将客户端重定向到主套接字,主套接字处理接收到的数据,并在客户端被接受时立即采取行动。
老实说,我不知道该怎么做。我搜索了几个小时,但我唯一发现的是 Stackoverflow 上接近它的东西:Apache - handling TCP connections, but not HTTP requests
但是使用那段脚本我无法保存数据(您正在使用哪个域)并将其发送到主套接字。
我不知道这是否可以由 Apache 完成,或者是否有可能,或者是否有任何其他解决方法。
谢谢你:)
最佳答案
您对子域感到困惑。套接字、TCP 和 IP 都对名称一无所知。 DNS 在网络堆栈出现多年后才被发明。
因此,您可以将任意数量的域指向机器上的单个“套接字”端口。
Apache 可以根据传入连接的目标 IP 地址 (1) 或 HTTP/1.1“主机” header (2) 将传入请求路由到不同的“网络空间”(即虚拟主机)。前者是过去虚拟主机的方式,但现在几乎每个人都使用后者。
(1) 即使只有一张网卡,一台机器也可以有多个 IP 地址,但端口对于该机器上的任何给定协议(protocol)都是唯一的。您将不同的域指向不同的地址,并在网络服务器上定义一个反向映射,这样它就可以知道请求是如何开始的。
(2) “主机”的值是提供给浏览器的 DNS 名称。由于此值已显式传递给网络服务器,因此该服务器不需要依赖#1 之类的技巧。
关于php - 如何使 apache 进程 TCP 连接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13357395/