我有一个Python服务器,多个客户端使用套接字连接。目前,一台服务器无法应对负载,因此我正在寻找根据某些标准(例如用户名)拆分客户端的方法。
目的是将客户端的服务器1上的A-G开头,服务器2上的H-P和服务器3上的P-Z。
我要做的是编写一个进程,侦听端口45000上的连接,然后将这些进程转发到45001,45002和45003上的相应服务器。
目前,当客户端连接到原始服务器时,他们通过TCP端口连接,例如45000.服务器检查它们是否已获得授权,并通过握手响应随机端口,例如59117,60647或61573。
客户端第一次连接时没有指定响应端口,所以我的问题是,确定的值是什么时候以及客户端如何知道在该端口上侦听回复?
到目前为止,我已经编写了一个PHP进程,它从客户端获取数据并将其转发到相应的服务器,但我无法确定从服务器回收哪个端口来回复响应。有没有办法PHP套接字可以协商响应端口,以便它可以存储在我的脚本中的变量中?
这是我在PHP中的基本连接代码。我不懂Python,所以这必须在PHP中完成:
// Define remote Server
$socket=socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
// Open socket on remote server to send $buf data to
socket_connect($socket, 'X.X.X.X', 40149);
echo ("Forwarding data ($buf) to $socket ....\r\n");
$bytesWritten=socket_write($socket, $buf, strlen($buf));
echo ("Wrote: $bytesWritten bytes\r\n");
// Now listen for response but this will be on another socket
// How do we know what this is ?
if (false === ($response = socket_read($socket, 16384))) {
echo ("Response: $response\r\n");
}
这是出于我的舒适区域所以我可能完全错了,但谷歌的一个下午已经找到了任何答案。