客户端通过http方式传输大数据给PHP服务器,有什么好的思路,请网友支招?

lm489155 发布于 2014/10/29 11:29
阅读 1K+
收藏 0

最近在做一个类似云笔记的产品,客户端分PC客户端和安卓客户端,自己主要负责后台PHP。目前pc端和安卓端都是通过C#和android各自的http类通过json实现同php的数据传输。但问题来了,通过http传输小的json数据给php服务器倒是没问题,一旦有大数据,比如笔记里有附件、视频等文件,这种数据轻而易举就达到30M或者更多,通过http请求PHP服务器,尽管可以配置php的参数(memory_limit\post_max_size\upload_max_filesize等参数)来达到上传大文件的需要,但占用服务器资源也是相对很大,若传一个50M的数据,首先服务器得分配一个50M的memory处理这个请求,倘若有多个用户同时上传很快会吃掉服务器大部分的内存,其次要开长连接保证网速低的情况下能够持续接收客户端传输的数据,还有会受断网的影响导致还未结束就断掉的情况。

现在思路是这样:把客户端的数据分块传输,类似断点下载的思路。比如客户端有一个30M的数据,这个数据客户端第一次传输从0-1024M,每次php会自己把前一次传递的数据写到服务器临时文件中,返回写入的最后一个字节的数值A给客户端,第二次从A到A+1M,知道传输完成,php那边已经写成了一个大文件。不知是否有网友解决过这方面的需求?


加载中
0
小运
小运
nginx的upload不知道行不行,你满看看。支持异步
lm489155
lm489155
谢谢你的建议。目前用的是apache,若nginx的upload真能实现断点上传大文件给php,值得一试。
0
netstu_
netstu_

老老实实的用 socket,并使用断点的方式吧,直接 http 简直死路一条

30M 没问题,300M 呢?

lm489155
lm489155
哦,我们公司现有的项目,主要是PHP跟客户端(安卓和WINFORM)交换数据用的http请求方式完成,若改成socket,是否可以将部分功能(如上传和下载大数据的功能)改成socket?还是说都应该统一用socket,若用户量大的情况,socket会有哪些需要注意的事项?求指点
返回顶部
顶部