php如何實現APP的秒髮功能
php如何實現APP的秒髮功能?很多社群軟體都是用了一種秒發機制,讓使用者的身體檢查感很好,今天我們也來談談這些社群軟體中常用的小技巧。希望對大家有幫助。
前言
想像一下,我們平常發朋友圈的時候,N張圖片配上文字,嗖的一下就發出去了,不帶任何拖泥帶水的那種,體驗感覺好爽~。
但是我們停下來用技術手段思考一下,這可能嗎?有些2G網路最多也就幾十K網速,我們的圖片隨便一張都幾M,即使壓縮過也有幾百K,怎麼可能瞬間發出訊息呢?
現在想想,是不是有些詭異呢~
其實吧,眾多社群軟體(微博,微信)都是用了一種秒發機制。他並不是真的先去發送然後發送完畢再告訴你發送成功,而是直接告訴你發送成功,然後後台再偷偷去上傳你發的東西,所以在網速不好的時候我們會經常發現一個現象,剛開始發出的朋友圈剛開始很正常,但是過了幾分鐘後,提示我們發送失敗!這很尷尬啊,明明剛開始你什麼也沒說啊,到了最關鍵的時候你告訴我不行了..
不要被高大上的技術嚇到了,無非就是做了一些小技巧而已,真的很基礎,但也真的很實用。
在討論技術前先宣告一些初始條件。
1.對資料庫表結構進行了一些特殊改造: 朋友圈內容表有一個特殊的字段status, status值有兩種情況,值可以為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 //正常获取数据(文本,图片,位置信息等) … 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); ?>
看出玄妙了嗎?我們對入庫的status字段進行了一次判斷,分別會有1(未發布)和2(已發布)兩種情況,那麼在讀取數據的時候我們應該怎麼做呢(list.php)?
那麼展示頁面就是這樣:
Lists.php
<?php //code .. //获取文字信息 Code.. //获取图片信息 //(它在获取当前用户pic表内的f_id(即获取朋友圈图片),最关键的地方是where条件 $data= DI()->notorm->pic->select('f_id')->where("status > 1 OR (status = 1 && u_id = {$u_id})")->->fetchAll(); //code .. ?>
此處的where 條件是秒發機制的最關鍵的地方:
status大於1(已發表)或等於1(未發布),(tips: status在有圖片的情況下預設值為1)但是屬於目前使用者發佈的內容,都可以讀出來,這就有一個很奇妙的現象,就是無論如何,我們自己發的朋友圈,自己永遠是可以讀出來的,但是其他人就不一定了(因為如果有圖片的話,還需要去調用另外一個進程上傳圖片,然後在那個進程將status改為2)
那么还有最后一个关键点,就是负责上传图片的那个进程(upload.php),这个是真实上传图片的逻辑,
有几张图片,这么upload.php就会被调用几次
每次上传成功后将图片行的字段status改成2
upload.php
<?php //Code.. //把图片上传到服务器目录 //获取长传结果标识,更改状态 If(上传成功){ //将status改回2 $status_data = array("status" => 2); DI()->notorm->pic->select('u_id')->where('u_id, $u_id)-->update($status_data); }else{ Code… }
经过以上的几个操作(首先是publish.php,如果有图片上传的话则调用upload.php,展示的时候是list.php)。
不知道大家看出门道没有,和我们平常写的发布功能不同的是,上传upload.php功能被独立出来了,改装后的发布publish.php会用最快的速度将你的文本内容存进数据库,并且如果有图片内容的话,他会单独调用上传API upload.php。
最关键的是在显示的时候做了一些小技巧,让自己保证可以看到自己发的东西。
相关推荐:
以上是php如何實現APP的秒髮功能的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

PHP 8.4 帶來了多項新功能、安全性改進和效能改進,同時棄用和刪除了大量功能。 本指南介紹如何在 Ubuntu、Debian 或其衍生版本上安裝 PHP 8.4 或升級到 PHP 8.4

Visual Studio Code,也稱為 VS Code,是一個免費的原始碼編輯器 - 或整合開發環境 (IDE) - 可用於所有主要作業系統。 VS Code 擁有大量針對多種程式語言的擴展,可以輕鬆編寫

JWT是一種基於JSON的開放標準,用於在各方之間安全地傳輸信息,主要用於身份驗證和信息交換。 1.JWT由Header、Payload和Signature三部分組成。 2.JWT的工作原理包括生成JWT、驗證JWT和解析Payload三個步驟。 3.在PHP中使用JWT進行身份驗證時,可以生成和驗證JWT,並在高級用法中包含用戶角色和權限信息。 4.常見錯誤包括簽名驗證失敗、令牌過期和Payload過大,調試技巧包括使用調試工具和日誌記錄。 5.性能優化和最佳實踐包括使用合適的簽名算法、合理設置有效期、

字符串是由字符組成的序列,包括字母、數字和符號。本教程將學習如何使用不同的方法在PHP中計算給定字符串中元音的數量。英語中的元音是a、e、i、o、u,它們可以是大寫或小寫。 什麼是元音? 元音是代表特定語音的字母字符。英語中共有五個元音,包括大寫和小寫: a, e, i, o, u 示例 1 輸入:字符串 = "Tutorialspoint" 輸出:6 解釋 字符串 "Tutorialspoint" 中的元音是 u、o、i、a、o、i。總共有 6 個元

本教程演示瞭如何使用PHP有效地處理XML文檔。 XML(可擴展的標記語言)是一種用於人類可讀性和機器解析的多功能文本標記語言。它通常用於數據存儲

靜態綁定(static::)在PHP中實現晚期靜態綁定(LSB),允許在靜態上下文中引用調用類而非定義類。 1)解析過程在運行時進行,2)在繼承關係中向上查找調用類,3)可能帶來性能開銷。

PHP的魔法方法有哪些? PHP的魔法方法包括:1.\_\_construct,用於初始化對象;2.\_\_destruct,用於清理資源;3.\_\_call,處理不存在的方法調用;4.\_\_get,實現動態屬性訪問;5.\_\_set,實現動態屬性設置。這些方法在特定情況下自動調用,提升代碼的靈活性和效率。

PHP和Python各有優勢,選擇依據項目需求。 1.PHP適合web開發,尤其快速開發和維護網站。 2.Python適用於數據科學、機器學習和人工智能,語法簡潔,適合初學者。
