在Sharded服务器配置中上传PHP文件
PHP File Upload in Sharded Server Configuration
我们使用多个服务器来处理传入的web请求,这些请求以循环方式进行负载平衡。我遇到了一个问题,我不知道该怎么解决。
使用AJAX(qqFileUploader),我正在上传一个文件。默认情况下,它会进入/tmp文件夹,这很好。问题是,当我尝试检索该文件时,该检索请求将由中没有我上传的文件的下一个服务器处理。如果我一次又一次地重复请求,它最终会到达存储文件的原始服务器(通过循环负载平衡),然后我可以打开它。显然,这不是一个好的解决方案。
这是本质上的代码:http://jsfiddle.net/Ap27Z/.为了简洁起见,我去掉了一些。您将看到上传器对象对PHP文件进行调用以进行文件上传,然后在文件上传完成后,对脚本进行另一个AJAX调用以处理.csv文件。这就是循环赛过程中迷失的地方。
我在SO上读到了一些关于将文件上传到内存的问题,目前看来这基本上是不可行的。有没有其他选项可以用来上传文件并在同一请求中处理所有文件?
我建议为每台机器添加一个子域前缀,例如上传到www.example.com,然后为每台服务器分配一个额外的子域www1.example.com、www2.example.com,这些子域总是直接传递给该服务器,而不是循环DNS。
作为成功结果的一部分,您可以传回指向确切服务器的服务器名称,而不是负载平衡名称,然后所有后续引用上载数据的Ajax调用都使用该服务器特定域名,而不是通用负载平衡域名。
有没有其他选项可以用来上传文件并处理所有文件在同一个请求中?
当然,为什么不呢?处理数据POST的代码可以做任何你想做的事情。
您的问题(至少)有两种解决方案:
- 您更改了负载平衡
有几个负载平衡代理支持会话亲和性,也称为"粘性会话"。这意味着用户在一个会话中总是获得相同的服务器。
两个可以这样操作的程序是HAProxy(这里是SO上的相关问题)和带有custon模块的nginx(这里是教程)。
- 您可以确定文件的位置
另一种选择是将存储文件的位置更改为所有服务器都可以通过同一位置访问的某个位置。例如,这可以是NFS装载或数据库(文件存储为BLOBS)。这样,哪个服务器处理请求并不重要,因为它们都可以访问该文件。
- 如何在php文件中获取$.post-ajax传递的值
- Javascript运行php文件,然后下载文件
- 通过Ajax将JavaScript函数传递给PHP文件
- 我想使用模态通过php文件发送邮件,并且我希望在提交关闭后关闭pop
- 通过ajax到php文件获取单选按钮值
- 每天用javascript包含不同的php文件
- 如何使用javascript调用Php文件
- 如何使用php文件中的GET来获取我在.js文件中声明的变量
- 在CodeIgniter视图中将Javascript或jQuery代码作为PHP文件编写可以吗
- 从表单中动态生成一个字符串,传递给通过AJAX加载的PHP文件
- 包括php文件和几个js文件
- 将JavaScript变量传递到HTML输入框和(在PHP文件中使用)
- PHP文件没有't从Javascript应用程序获取$_POST
- 如何显示由ajax调用运行的PHP文件的echo
- 如何将php变量从php文件传递到js文件
- 如何使用javascript/jquery将变量从一个PHP文件传递到另一个PHP文件
- 在同一主机上对PHP文件使用XMLHTTP请求的Javascript违反了同源策略
- 通过Wordpress中的jquery调用运行php文件
- 通过Javascript调用php文件
- 如果($_SERVER[“REQUEST_METHOD”]=“POST”)条件在ajax调用不同的php文件进行验证和提