服务器如何从运行多个实例的另一台服务器中识别php脚本实例?

服务器如何从运行多个实例的另一台服务器中识别php脚本实例?,php,http,proxy,parallel-processing,multiple-instances,Php,Http,Proxy,Parallel Processing,Multiple Instances,我有两台服务器。主服务器充当server2的web服务,而server2正在与客户端通信 Server2运行一个php脚本,从客户端获取一些数据,然后将其发送到主服务器,然后读取主服务器上某个页面的内容(根据客户端的数据生成),还读取从主服务器返回的http头,以获取cookie值 服务器2代码: some code ... $postdata = http_build_query( array( 'var1' => 'value1', 'var

我有两台服务器。主服务器充当server2的web服务,而server2正在与客户端通信

Server2运行一个php脚本,从客户端获取一些数据,然后将其发送到主服务器,然后读取主服务器上某个页面的内容(根据客户端的数据生成),还读取从主服务器返回的http头,以获取cookie值

服务器2代码:

some code ...

$postdata = http_build_query(
    array(
        'var1' => 'value1',
        'var2' => $_POST["var2"],
        'var3' => $_POST["var3"]
    )
);
$opts = array('http' =>
    array(
        'method'  => 'POST',
        'header'  => 'Content-type: application/x-www-form-urlencoded',
        'content' => $postdata
    )
);

$context = stream_context_create($opts);
file_get_contents("http://www.mainserver.com", false, $context);
$cookieContent = getCookieContent($http_response_header);
SetCookie('myCookie', $cookieContent, $loginTime, '/', $url, false);

more code ....
主服务器不运行php脚本,但会按预期写入cookie值。 cookie值是唯一的,并根据server2传递的客户端详细信息生成

因此,基本上,server2充当“代理”(或反向代理),应该为每个客户机设置他从主服务器获得的唯一cookie值

我的问题是:

我的逻辑行得通吗?我知道它适用于一个客户端,但当多个客户端访问服务器2上的同一脚本时会发生什么?主服务器如何知道将带有正确唯一值的答案返回到server2上的正确php实例


换句话说,客户端是否有可能向server2发送请求,server2是否会返回一个具有唯一值的答案,该值属于不同的客户端?

那么,您似乎想要实现自己的反向代理系统

基本上,您的代理(示例中的server2)需要记住所有需要执行的操作

  • 将客户端请求传递给服务器
  • 服务器生成所需页面后,回答客户机
  • 处理服务器不应答的情况(即请求超时)
在一个简单的客户机-服务器交换中,服务器将使用客户机发送的HTTP头来生成即时回复,因此不需要记住这些头

在代理体系结构中,代理不会立即回复(它会要求服务器提供实际回复)

在服务器生成回复所需的时间内,代理必须记住原始客户端请求的引用,以

  • 一旦服务器最终生成最终回复,使用它重新创建最终回复
  • 处理来自客户端的请求取消
这意味着代理必须异步处理两种方式的通信通道,而简单的服务器可以同步处理请求

您的示例显示的是从代理到服务器的上行链路

在此上行链路中,代理必须透明地提供客户端传递的所有信息,并添加一些指示,说明服务器应如何将已完成的请求传回给他

示例的
$context
变量应包含客户端传递的HTTP头,以及一些到代理的反向链接,服务器将使用这些反向链接将其响应定向到代理,而不是客户端

反过来,服务器将处理该请求,就像它是由客户机直接发送的一样。但是,一旦请求得到处理,它将使用反向链接来回答代理

代理将从服务器获得响应,并使用存储的请求上下文来决定如何处理结果。客户端可能同时丢弃了请求,在这种情况下,结果将被忽略。否则,它将使用请求上下文将响应传递给客户端

尽管如此,服务器提供的唯一ID是不必要的,因为服务器永远不会直接与客户机通信。重要的是,代理和服务器可以清楚地识别他们正在处理的请求

简而言之,唯一需要的是服务器和代理之间的请求标识符


您仍然可以基于Cookie、IP地址或任何其他方式为每个客户端生成唯一的ID,但这与无代理客户端-服务器体系结构中的会话处理没有什么不同。

您似乎想实现自己的反向代理系统

基本上,您的代理(示例中的server2)需要记住所有需要执行的操作

  • 将客户端请求传递给服务器
  • 服务器生成所需页面后,回答客户机
  • 处理服务器不应答的情况(即请求超时)
在一个简单的客户机-服务器交换中,服务器将使用客户机发送的HTTP头来生成即时回复,因此不需要记住这些头

在代理体系结构中,代理不会立即回复(它会要求服务器提供实际回复)

在服务器生成回复所需的时间内,代理必须记住原始客户端请求的引用,以

  • 一旦服务器最终生成最终回复,使用它重新创建最终回复
  • 处理来自客户端的请求取消
这意味着代理必须异步处理两种方式的通信通道,而简单的服务器可以同步处理请求

您的示例显示的是从代理到服务器的上行链路

在此上行链路中,代理必须透明地提供客户端传递的所有信息,并添加一些指示,说明服务器应如何将已完成的请求传回给他

示例的
$context
变量应包含客户端传递的HTTP头,以及一些到代理的反向链接,服务器将使用这些反向链接将其响应定向到代理,而不是客户端

反过来,服务器将处理该请求,就像它是由客户机直接发送的一样。但是,一旦请求得到处理,它将使用反向链接来回答代理

代理将从服务器获得响应,并使用存储的请求上下文来决定