手机版

php如何实现App常用的二次发送功能分析

时间:2021-09-08 来源:互联网 编辑:宝哥软件园 浏览:

想象一下,我们平时发朋友圈的时候,n张带文字的图片唰的一下就发出来了,一点拖泥带水的感觉都没有,体验感觉好爽~。

但让我们停下来,从技术上想想。这可能吗?有些2G网络速度最多几十K。我们的图片只有几米长,即使压缩也有几百k,怎么能瞬间发消息?

现在想想,是不是有点诡异~

其实很多社交软件(微博、微信)都使用第二种发送机制。他并不是真的先发了再告诉你成功了。而是直接告诉你成功了,然后偷偷上传你在后台发的东西。所以,当网速不好的时候,我们经常会发现一个现象。刚开始发的朋友圈是正常的,但是几分钟后提示我们发不了!这很尴尬。你一开始什么都没说,但是到了最关键的时候,你告诉我我不能.

不要被高科技吓到。只是一点小技巧。真的很基础,但也很实用。

在讨论技术之前,先声明一些初始条件。

1.对数据库表结构做了一些特殊的修改:朋友圈的内容表有一个特殊的字段状态,状态值可以是1或2。如果值为1,则该朋友圈尚未发布。值为2表示朋友圈已经发布。(暂时不能理解为什么这样做的同学,可以先继续阅读,以后再解释)

2.本文的二发功能是指有图片时的使用。如果有图片,上传图片太慢,需要采用二发机制。但是如果纯文本没有图片,就没有必要了,因为文本传输量很低,可以按照正常流程发送。

3.本文的代码基于PhalApi框架,语法相对简单。有ORM操作经验的同学应该了解

4.本文主要讲解APP的二次发送功能,在WEB端并不是特别需要,因为现代网络足以让我们的PC一次发送很多图片(10M/s,20M/s)

从大方向讨论整个执行过程:

客户端调用发布API,服务器发布内容(publish.php)。如果有图片,客户端还会调用一个额外的上传API (upload.php)。当上传API(upload.php)还没有完成工作的时候,客户端会直接告诉你发布成功(其实目前上传还没有完成,后面还有一个过程在拼命帮你上传)。然后客户端会临时拼接你发的文字和图片给你看(目前只有你能看到,你朋友圈其他人看不到),然后等待API(upload.php)的结果上传/当然,上传可能会超时(通常结果会在一分钟内出来)。成功了就顺利上传,失败了就发不了,但是在等待结果的一分钟之内,会让你觉得已经发了,除非

那我们就从技术层面来分析这个机制:

当我们点击右上角的发送按钮时,两个进程同时启动。一个过程是帮你上传文字,告诉你已经发送成功(publish.php),另一个过程是偷偷上传你发送的图片(upload.php)。具体代码如下:

Publish.php

?Php //通常获取数据(文本、图片、位置信息等)。)……代码//判断,如果有图片,就不发布(状态为1),如果没有图片,就立即发布(状态为2) //如果有图片,通过返回标识符告诉客户端,让他快速调用真正的上传逻辑uploading。我们只上传最基本的文字,多设置一个状态。1 : 2;//加入传入数据$ where _ Data=array(' status '=$ status)//数据传入di()-符号-friends-insert($ where _ Data);看到奥秘了吗?我们已经对收货的状态字段做了判断,有两种情况:1(未发布)和2(已发布),那么读取数据(list.php)时应该怎么做呢?

然后显示页面是这样的:

Lists.php

?PHP//代码.//获取文本信息代码.//获取图片信息//(就是获取当前用户pic表中的f_id(也就是获取朋友圈的图片),关键的地方是条件$ data=di()-not RM-pic-select(' f _ id ')-其中(' status 1或(status //code.这里的where条件是第二种发送机制中最关键的部分:

Status大于1(已发布)或等于1(未发布),(tips:有图片时status的默认值为1),但是当前用户发布的内容是可以读出的,这就有一个奇妙的现象,那就是无论如何,我们总是可以读出自己的朋友圈,但是别人不确定(因为如果有图片,我们需要调用另一个进程来上传图片。

然后还有最后一个关键点,就是负责上传图片的流程(upload.php),这才是真正上传图片的逻辑。

有几张图片,所以upload.php会被叫几次

每次成功上传后,将图片行的字段状态更改为2

upload.php

?PHP//代码.//将图片上传到服务器目录//获取长传输结果ID,更改状态If(上传成功){//将状态改回2 $ status _ data=array(' status '=2);DI()-not RM-pic-select(' u_id ')-其中(' u _ id,$ u _ id)-update($ status _ data);} else {code.}经过以上操作(第一,publish.php,如果有图片上传,打电话给upload.php,显示出来的时候是list.php)。

我不知道你是否看到了门口。不同于我们平时写的发布功能,上传uploading的功能是独立的。修改后的发布publishing会尽快将你的文字内容保存到数据库中,如果有图片内容,他会单独调用上传API upload.php。

最重要的是在展示的时候做一些小技巧,这样可以保证你能看到你发的东西。

好了,这就是本文的全部内容。希望对你学习PHP有帮助,请继续关注我们。

版权声明:php如何实现App常用的二次发送功能分析是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。