Maison  >  Article  >  développement back-end  >  Comment implémenter la fonction de livraison instantanée de l'APP en php

Comment implémenter la fonction de livraison instantanée de l'APP en php

*文
*文original
2018-01-02 13:29:331785parcourir

Comment implémenter la fonction de livraison instantanée de l'APP en PHP ? De nombreux logiciels sociaux utilisent un mécanisme de libération rapide pour que les utilisateurs se sentent bien lors de leur examen physique. Aujourd'hui, nous parlerons également de quelques astuces couramment utilisées dans ces logiciels sociaux. J'espère que cela aide tout le monde.

Avant-propos

Imaginez que lorsque nous publions habituellement sur WeChat Moments, nous ajoutons N images avec du texte, et elles sont envoyées en un éclair sans aucune négligence de ce genre. d'expérience est tellement cool ~.

Mais arrêtons-nous et réfléchissons-y techniquement, est-ce possible ? Certains réseaux 2G n'ont qu'une vitesse de plusieurs dizaines de kilo-octets au maximum. Nos images ne font que quelques mégaoctets chacune, et même si elles sont compressées, elles font des centaines de kilo-octets. Comment est-il possible d'envoyer un message instantanément ?

Maintenant que vous y réfléchissez, n'est-ce pas un peu bizarre~

En fait, de nombreux logiciels sociaux (Weibo, WeChat) utilisent un mécanisme de messagerie instantanée. Il ne l'envoie pas vraiment en premier, puis vous dit qu'il a été envoyé avec succès, mais vous indique directement qu'il a été envoyé avec succès, puis télécharge secrètement ce que vous avez envoyé en arrière-plan, nous trouvons donc souvent un phénomène lorsque la vitesse du réseau est pas bon. , les Moments nouvellement envoyés étaient normaux au début, mais après quelques minutes, on nous a dit que l'envoi avait échoué ! C'est très embarrassant. Tu n'as rien dit au début, mais au moment le plus critique tu m'as dit que tu ne pouvais plus le faire..

Ne te laisse pas intimider par le une technologie avancée, c'est juste quelques conseils, vraiment basiques, mais aussi très pratiques.

Énoncez d’abord quelques conditions initiales avant de discuter de la technologie.

1. Certaines modifications spéciales ont été apportées à la structure de la table de la base de données : La table de contenu du cercle d'amis a un statut de champ spécial. Il existe deux valeurs de statut. La valeur peut être 1 ou 2.
Le. la valeur 1 est Le cercle d'amis n'est pas publié. Une valeur de 2 signifie que le cercle d'amis a été publié. (Les étudiants qui ne comprennent pas pourquoi cela est fait pour le moment peuvent d'abord continuer à lire, et cela sera expliqué plus tard)

2. La fonction de publication instantanée de cet article fait référence à son utilisation lorsqu'il y a sont des images, car il y a des images. Dans ce cas, le téléchargement de l'image est trop lent, il faut donc utiliser le deuxième mécanisme d'envoi. Cependant, s'il n'y a pas de texte pur dans l'image, ce n'est pas nécessaire, car le volume de transmission du texte. est très faible et peut être envoyé selon le processus normal.

3. Le code de cet article est basé sur le framework PhalApi et la syntaxe est relativement simple. Les étudiants ayant de l'expérience dans les opérations ORM doivent le comprendre

4. Cet article explique principalement la deuxième fonction d'envoi de l'APP. Cette fonction n'est pas particulièrement nécessaire du côté WEB, car le réseau moderne est suffisant pour que notre PC envoie de très nombreuses images à la fois (10 M/s, 20 M/s) <.>

Discutons de l'ensemble du processus d'exécution en général :

Le client appelle l'API de publication et le serveur publie le contenu (

publier .php), s'il y a des images, alors le client devra appeler une API de téléchargement supplémentaire (upload.php Lors de cette API de téléchargement (upload.php). n'a pas terminé le travail, le client vous dira directement que vous avez publié avec succès (en fait, le téléchargement n'est pas encore terminé, il y a un processus derrière lui qui fait de son mieux pour vous aider à télécharger), puis le client divisera temporairement le le texte et les images que vous avez envoyés et vous les affichez (actuellement, vous seul pouvez les voir, vous les autres membres du cercle d'amis ne pouvez pas le voir), puis attendez le résultat de l'API de téléchargement (upload.php )/Bien sûr, le téléchargement peut expirer (généralement, le résultat sera publié dans la minute). En cas de succès, le téléchargement se déroulera sans problème. Si le téléchargement échoue, il signalera que le téléchargement a échoué. Cependant, dans la minute suivant l'attente. le résultat, il vous laissera d'abord penser que vous l'avez envoyé. À moins que le téléchargement échoue, il vous le rappellera plus tard.

Analysons donc ce mécanisme au niveau technique :

Quand on clique Après avoir appuyé sur envoyer dans le coin supérieur droit, deux processus sont lancés en même temps. L'un d'eux vous aide à télécharger le texte et vous indique qu'il a été envoyé avec succès (

publish.php), et l'autre processus en secret. le télécharge. La photo que vous avez envoyée (upload.php), le code spécifique est le suivant :

Publish.php

<?php
 
//正常获取数据(文本,图片,位置信息等)
 
…
 
Code …
 
Code …
 
//进行判断,如果有图片则为未发布(status为1),无图片则为立即发布(status为2)
 
//如果有图片则通过返回标识符告诉客户端,让他赶紧去调用真实的上传逻辑upload.php,我们这只把最基本的文本上传好,再设置多一个status而已~
 
$status = ($pic_num > 0) ? 1 : 2;
 
//拼接入库数据
 
$where_data = array( "status"=> $status)
 
//数据入库
 
DI()->notorm-> friends ->insert($where_data);
 
?>
Voyez-vous le mystère ? Nous avons porté un jugement sur le champ

status saisi dans la base de données. Il y a deux situations : 1 (non publié) et 2 (publié). Alors que devons-nous faire lors de la lecture des données (list.php). ) ?

Ensuite la page d'affichage est comme ceci :

Lists.php


<?php
 
//code ..
 
//获取文字信息
 
Code..
 
//获取图片信息
//(它在获取当前用户pic表内的f_id(即获取朋友圈图片),最关键的地方是where条件
$data= DI()->notorm->pic->select(&#39;f_id&#39;)->where("status > 1 OR (status = 1 && u_id = {$u_id})")->->fetchAll();
 
 
//code ..
 
?>
Ici

La condition est la partie la plus critique du mécanisme de livraison instantanée :

statut est supérieur à 1 (publié) ou égal à 1 (non publié), ( astuces : statutLa valeur par défaut est 1 lorsqu'il y a des images), mais le contenu publié par l'utilisateur actuel peut être lu à haute voix. Cela a un phénomène très merveilleux, c'est-à-dire quoi qu'il arrive. nous l'avons posté nous-mêmes Dans le cercle d'amis, vous pouvez toujours le lire, mais d'autres non (car s'il y a des images, vous devez appeler un autre processus pour télécharger les images, puis changer le statut en 2 dans ce processus)

那么还有最后一个关键点,就是负责上传图片的那个进程(upload.php),这个是真实上传图片的逻辑,

有几张图片,这么upload.php就会被调用几次

每次上传成功后将图片行的字段status改成2

upload.php

<?php
 
//Code..
 
//把图片上传到服务器目录
 
//获取长传结果标识,更改状态
 
If(上传成功){
 
//将status改回2
 
$status_data = array("status" => 2);
 
DI()->notorm->pic->select(&#39;u_id&#39;)->where(&#39;u_id, $u_id)-->update($status_data);
 
}else{
 
Code…
 
}

经过以上的几个操作(首先是publish.php,如果有图片上传的话则调用upload.php,展示的时候是list.php)。

不知道大家看出门道没有,和我们平常写的发布功能不同的是,上传upload.php功能被独立出来了,改装后的发布publish.php会用最快的速度将你的文本内容存进数据库,并且如果有图片内容的话,他会单独调用上传API upload.php

最关键的是在显示的时候做了一些小技巧,让自己保证可以看到自己发的东西。

相关推荐:

laravel编写APP接口(API)

PHP之Reflection API详解

phalapi之如何实现数据库读写分离

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn