ホームページ  >  記事  >  バックエンド開発  >  APPの即時配信機能をphpで実装する方法

APPの即時配信機能をphpで実装する方法

*文
*文オリジナル
2018-01-02 13:29:331804ブラウズ

PHPでAPPの即時配信機能を実装するにはどうすればよいですか?多くのソーシャル ソフトウェアでは、ユーザーが健康診断を受けられるようにするためにクイック リリース メカニズムが使用されています。今日は、これらのソーシャル ソフトウェアで一般的に使用されているいくつかのヒントについても説明します。お役に立てれば幸いです。

前書き

私たちが普段 WeChat モーメントに投稿するとき、N 枚の写真がテキストとともに送信され、手抜きもなくあっという間に送信されることを想像してみてください。その体験はとてもクールに感じられます。

しかし、立ち止まって技術的に考えてみましょう。これは可能でしょうか?一部の 2G ネットワークでは、せいぜい数十キロバイトの速度しかありません。私たちの写真は、圧縮されていても数百キロバイトのサイズですが、どうすればメッセージを瞬時に送信できるのでしょうか。

今考えると、少し奇妙ではありませんか~

実際、多くのソーシャル ソフトウェア (Weibo、WeChat) は、一種のインスタント メッセージング メカニズムを使用しています。実際に送信してから送信に成功したことを通知するのではなく、送信に成功したことを直接通知し、その後バックグラウンドで送信した内容をこっそりアップロードするという現象がよく発生します。ネットワーク速度が良くないため、新しく送信されたモーメントは最初は正常でしたが、数分後に送信に失敗したというメッセージが表示されました。これはとても恥ずかしいことです。最初は何も言わなかったのに、最も重要な瞬間に、もう無理だと言いました。

先進的なテクノロジーに怯えないでください。小さなトリックです。本当に基本的なものですが、非常に実用的でもあります。

テクノロジーについて議論する前に、最初にいくつかの初期条件を述べます。

1. データベース テーブルの構造にいくつかの特別な変更が加えられました。友達のサークルのコンテンツ テーブルには特別なフィールド ステータスがあり、値は 1 または 2 です。値 1 は次のことを意味します。友達の輪は公開されていません。 値 2 は、友達のサークルが公開されていることを意味します。 (理由がわからない人は、とりあえず読み進めてください。後で説明します)

2. この記事のインスタント投稿機能は、写真がある場合に使用することを指します。写真がある場合、写真のアップロードが遅すぎるため、2 番目の送信メカニズムを使用する必要がありますが、写真がなくプレーンテキストの場合は、テキスト送信量が非常に少ないため、その必要はありません。通常の手順で送信できます。


3. この記事のコードは PhalApi フレームワークに基づいており、構文は比較的単純です。ORM 操作の経験がある学生であれば理解できるはずです


4. この記事では主に APP の即時配信機能について説明します。 WEB 側 この機能は特に必要ありません。現代のネットワークでは、PC が一度にたくさんの写真 (10M/s、20M/s) を送信できるので十分です


実行プロセス全体について一般的に説明します。

クライアントは公開 API を呼び出し、サーバーはコンテンツ (

publish.php) を公開します。このアップロード API () では、クライアントは追加のアップロード API (upload.php) を呼び出す必要があります。 Upload.php)、作業が完了すると、クライアントはリリースが成功したことを直接伝えます (実際には、アップロードはまだ完了しておらず、その背後にアップロードを必死に支援するプロセスがあります)。次に、クライアントは送信したテキストと写真を一時的に結合して表示し (現在、表示できるのはあなただけであり、友達サークルの他のユーザーは表示できません)、アップロード API の結果を待ちます ( upload.php) / もちろん、アップロードはタイムアウトする可能性があります (通常は 1 分以内に結果が表示されます)。成功した場合はスムーズにアップロードされ、失敗した場合は送信失敗が報告されます。結果を待ってから 1 分以内に、アップロードが失敗しない限り、送信したと思わせます。後で通知されます。

それでは、このメカニズムを技術レベルで分析してみましょう:

右上隅の送信ボタンをクリックすると、2 つのプロセスが同時に開始され、そのうちの 1 つはアップロードを支援します。別のプロセスでは、送信した写真を秘密裏にアップロードします (

upload.php)。具体的なコードは次のとおりです:

rreee 謎がわかりますか?データベースに入力された status

フィールドに基づいて 1 (未公開) と 2 (公開) の 2 つの状況があり、データ (

list.php) を読み取るときはどうすればよいでしょうか。 その後、表示ページは次のようになります:

Lists.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);
 
?>

ここでの
where

条件は、インスタント配信メカニズムの最も重要な部分です:

status

は1より大きい(公開済み) または 1 (未公開) に等しい、(

ヒント: ステータス画像がある場合のデフォルト値は 1) ですが、現在のユーザーが公開したコンテンツは読み取れるという非常に素晴らしい現象があります。どうだろうと関係なく、私たちは自分自身が投稿したモーメントをいつでも読むことができますが、他の人は読むことができない場合があります (写真がある場合は、別のプロセスを呼び出して写真をアップロードし、そのプロセスでステータスを 2 に変更する必要があるため)

那么还有最后一个关键点,就是负责上传图片的那个进程(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之如何实现数据库读写分离

以上がAPPの即時配信機能をphpで実装する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。