亚洲精品中文字幕无乱码_久久亚洲精品无码AV大片_最新国产免费Av网址_国产精品3级片

php語言

淺析php如何實(shí)現(xiàn)App常用的秒發(fā)功能

時(shí)間:2024-08-28 11:30:29 php語言 我要投稿
  • 相關(guān)推薦

淺析php如何實(shí)現(xiàn)App常用的秒發(fā)功能

  很多社交軟件都是用了一種秒發(fā)機(jī)制,讓用戶的體檢感很好,今天我們也來談?wù)勥@些社交軟件中常用的小技巧。就跟隨百分網(wǎng)小編一起去了解下吧,想了解更多相關(guān)信息請持續(xù)關(guān)注我們應(yīng)屆畢業(yè)生考試網(wǎng)!

  前言

  想象一下,我們平常發(fā)朋友圈的時(shí)候,N張圖片配上文字,嗖的一下就發(fā)出去了,不帶任何拖泥帶水的那種,體驗(yàn)感覺好爽~。

  但是我們停下來用技術(shù)手段思考一下,這可能嗎?有些2G網(wǎng)絡(luò)最多也就幾十K網(wǎng)速,我們的圖片隨便一張都幾M,即使壓縮過也有幾百K,怎么可能瞬間發(fā)出消息呢?

  現(xiàn)在想想,是不是有些詭異呢~

  其實(shí)吧,眾多社交軟件(微博,微信)都是用了一種秒發(fā)機(jī)制。他并不是真的先去發(fā)送然后發(fā)送完畢再告訴你發(fā)送成功,而是直接告訴你發(fā)送成功,然后后臺再偷偷去上傳你發(fā)的東西,所以在網(wǎng)速不好的時(shí)候我們會經(jīng)常發(fā)現(xiàn)一個(gè)現(xiàn)象,剛開始發(fā)出的朋友圈剛開始很正常,但是過了幾分鐘后,提示我們發(fā)送失。∵@很很尷尬啊,明明剛開始你什么也沒說啊,到了最關(guān)鍵的時(shí)候你告訴我不行了..

  不要被高大上的技術(shù)嚇到了,無非就是做了一些小技巧而已,真的很基礎(chǔ),但是也真的很實(shí)用。

  在討論技術(shù)前首先聲明一些初始條件。

  1.對數(shù)據(jù)庫表結(jié)構(gòu)進(jìn)行了一些特殊改造: 朋友圈內(nèi)容表有一個(gè)特殊的字段status, status值有兩種情況,值可以為1或者2,

  值為1是朋友圈未發(fā)布。 值為2是朋友圈已發(fā)布。 (暫時(shí)看不懂為什么這樣做的同學(xué),可以先繼續(xù)閱讀,后面會講解)

  2.此篇文章的秒發(fā)功能指的有圖片的情況下使用,因?yàn)橛袌D片的話,圖片上傳太慢,所以需要采用秒發(fā)機(jī)制,但是沒有圖片純文字的話,就沒太大的必要了,因?yàn)槲谋緜鬏斄亢艿,按照正常流程發(fā)送即可。

  3.此篇文章的代碼是基于PhalApi框架,語法都比較簡單,有過ORM操作經(jīng)驗(yàn)的同學(xué)應(yīng)該都看得懂

  4.此篇文章主要講解APP的秒發(fā)功能,WEB端不是特別需要這個(gè)功能,因?yàn)楝F(xiàn)代網(wǎng)絡(luò)足以我們的PC一次性發(fā)送很多很多張圖片(10M/s,20M/s)

  大方向討論一下整個(gè)執(zhí)行流程:

  客戶端調(diào)用發(fā)布API,服務(wù)端進(jìn)行發(fā)布內(nèi)容(publish.php),如果是有圖片,那么客戶端還要額外調(diào)用一個(gè)上傳API(upload.php),在這個(gè)上傳API(upload.php)還沒完成工作的時(shí)候,客戶端會直接告訴你發(fā)布成功(其實(shí)當(dāng)前是沒有上傳完成,后面有一個(gè)進(jìn)程在拼命幫你上傳著呢),然后客戶端會把你發(fā)的文字和圖片暫時(shí)拼接好顯示給你看(當(dāng)前只有你能看到,你朋友圈其他人是看不到的),然后等待著上傳API(upload.php)的結(jié)果/當(dāng)然也可能上傳超時(shí)(通常一分鐘內(nèi)會出結(jié)果),如果成功的話則順利上傳,失敗的話則報(bào)發(fā)送失敗,但是在等待結(jié)果的一分鐘之內(nèi),他會先讓你覺得你已經(jīng)發(fā)送了,除非上傳失敗,才會在后來提醒你。

  那么讓我們在技術(shù)層面來分析一下這套機(jī)制吧:

  當(dāng)我們點(diǎn)上右上角的發(fā)送鍵后,有兩個(gè)進(jìn)程在同時(shí)啟動,其中一個(gè)進(jìn)程是幫你上傳文本并且告訴你已經(jīng)發(fā)送成功啦(publish.php),另外一個(gè)進(jìn)程是偷偷去上傳你發(fā)的圖片(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

  //正常獲取數(shù)據(jù)(文本,圖片,位置信息等)

  …

  Code …

  Code …

  //進(jìn)行判斷,如果有圖片則為未發(fā)布(status為1),無圖片則為立即發(fā)布(status為2)

  //如果有圖片則通過返回標(biāo)識符告訴客戶端,讓他趕緊去調(diào)用真實(shí)的上傳邏輯upload.php,我們這只把最基本的文本上傳好,再設(shè)置多一個(gè)status而已~

  $status = ($pic_num > 0) ? 1 : 2;

  //拼接入庫數(shù)據(jù)

  $where_data = array( "status"=> $status)

  //數(shù)據(jù)入庫

  DI()->notorm-> friends ->insert($where_data);

  ?>

  看出玄妙了嗎?我們對入庫的status字段進(jìn)行了一次判斷,分別會有1(未發(fā)布)和2(已發(fā)布)兩種情況,那么在讀取數(shù)據(jù)的時(shí)候我們應(yīng)該怎么做呢(list.php)?

  那么展示頁面就是這樣:

  Lists.php

  ?

  1

  2

  3

  4

  5

  6

  7

  8

  9

  10

  11

  12

  13

  14

  15

  16

  <?php

  //code ..

  //獲取文字信息

  Code..

  //獲取圖片信息

  //(它在獲取當(dāng)前用戶pic表內(nèi)的f_id(即獲取朋友圈圖片),最關(guān)鍵的地方是where條件

  $data= DI()->notorm->pic->select('f_id')->where("status > 1 OR (status = 1 && u_id = {$u_id})")->->fetchAll();

  //code ..

  ?>

  此處的where條件是秒發(fā)機(jī)制的最關(guān)鍵的地方:

  status大于1(已發(fā)表)或者等于1(未發(fā)布),(tips:status在有圖片的情況下默認(rèn)值為1)但是屬于當(dāng)前用戶發(fā)布的內(nèi)容,都可以讀出來,這就有一個(gè)很奇妙的現(xiàn)象,就是無論如何,我們自己發(fā)的朋友圈,自己永遠(yuǎn)是可以讀出來的,但是其他人就不一定了(因?yàn)槿绻袌D片的話,還需要去調(diào)用另外一個(gè)進(jìn)程上傳圖片,然后在那個(gè)進(jìn)程將status改為2)

【淺析php如何實(shí)現(xiàn)App常用的秒發(fā)功能】相關(guān)文章:

php實(shí)現(xiàn)圖片縮放功能類08-17

PHP實(shí)現(xiàn)搜索查詢功能的方法技巧08-01

php中怎么實(shí)現(xiàn)回刪功能08-31

php中實(shí)現(xiàn)回刪功能實(shí)例10-03

PHP中多態(tài)如何實(shí)現(xiàn)09-04

php如何實(shí)現(xiàn)快速排序09-18

PHP弱類型變量是如何實(shí)現(xiàn)的05-31

php如何實(shí)現(xiàn)驗(yàn)證碼06-13

如何用PHP實(shí)現(xiàn)找回密碼11-11

PHP中如何實(shí)現(xiàn)crontab代碼05-30