php - 如何使 apache 进程 TCP 连接?

标签 php apache sockets tcp subdomain

我有一个问题困扰了我将近 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/

相关文章:

php - 记录PHP脚本的实时运行时间

php - 如何在 Mac OS Mojave 上编译和使用 php 扩展

c++ - UDP 套接字。如何确定数据是否发送到线路?

php - jQuery 将 php 数组更新为 javascript

php - 在 PHP 中检索日期名称

php - 由于 iFrame,网站在移动设备上失去了响应能力?

apache - Apache:返回404错误而不是500错误

php - AWS 上的 504(网关超时)

c++ - 在 C++ 代码中重新启动连接时出现“断管”错误

node.js - 套接字.io : how to control & check the message flow?