<pre id="bbfd9"><del id="bbfd9"><dfn id="bbfd9"></dfn></del></pre>

          <ruby id="bbfd9"></ruby><p id="bbfd9"><mark id="bbfd9"></mark></p>

          <p id="bbfd9"></p>

          <p id="bbfd9"><cite id="bbfd9"></cite></p>

            <th id="bbfd9"><form id="bbfd9"><dl id="bbfd9"></dl></form></th>

            <p id="bbfd9"><cite id="bbfd9"></cite></p><p id="bbfd9"></p>
            <p id="bbfd9"><cite id="bbfd9"><progress id="bbfd9"></progress></cite></p>
            php語言

            淺析php如何實現App常用的秒發功能

            時間:2025-04-05 02:41:39 php語言 我要投稿
            • 相關推薦

            淺析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

              ?

              1

              2

              3

              4

              5

              6

              7

              8

              9

              10

              11

              12

              13

              14

              15

              16

              17

              18

              19

              20

              21

              22

              23

              24

              25

              <?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

              ?

              1

              2

              3

              4

              5

              6

              7

              8

              9

              10

              11

              12

              13

              14

              15

              16

              <?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)

            【淺析php如何實現App常用的秒發功能】相關文章:

            php實現圖片縮放功能類08-17

            PHP實現搜索查詢功能的方法技巧08-01

            php中怎么實現回刪功能08-31

            php實現文件上傳及頭像預覽功能10-17

            php中實現回刪功能實例10-03

            PHP中多態如何實現09-04

            php如何實現快速排序09-18

            php+js實現倒計時功能08-28

            如何用PHP實現找回密碼11-11

                    <pre id="bbfd9"><del id="bbfd9"><dfn id="bbfd9"></dfn></del></pre>

                    <ruby id="bbfd9"></ruby><p id="bbfd9"><mark id="bbfd9"></mark></p>

                    <p id="bbfd9"></p>

                    <p id="bbfd9"><cite id="bbfd9"></cite></p>

                      <th id="bbfd9"><form id="bbfd9"><dl id="bbfd9"></dl></form></th>

                      <p id="bbfd9"><cite id="bbfd9"></cite></p><p id="bbfd9"></p>
                      <p id="bbfd9"><cite id="bbfd9"><progress id="bbfd9"></progress></cite></p>
                      飘沙影院