はじめに
私たちが普段 WeChat モーメントに投稿するとき、N 枚の写真がテキストと組み合わされて、手抜きなく瞬時に送信されることを想像してみてください。その体験はとてもクールに感じます~。
しかし、立ち止まって技術的に考えてみましょう。これは可能でしょうか?一部の 2G ネットワークでは、最大でも数十キロバイトの速度しかありません。圧縮されていても数百キロバイトの写真が、どのようにして瞬時に送信できるのでしょうか。
今考えると、ちょっと変じゃないですか〜
実際、多くのソーシャル ソフトウェア (Weibo、WeChat) はセカンド投稿メカニズムを使用しています。実際に送信してから送信に成功したことを通知するのではなく、送信に成功したことを直接通知し、その後バックグラウンドで送信した内容をこっそりアップロードするという現象がよく発生します。ネットワーク速度が良くないため、新しく送信されたモーメントは最初は正常でしたが、数分後に送信に失敗したというメッセージが表示されました。とても恥ずかしいことですが、最初は何も言わなかったのに、肝心なときに無理だと言われました
。高度なテクノロジーに怯える必要はありません。これはほんの小さなトリックにすぎません。しかし、非常に実用的でもあります。
テクノロジーについて説明する前に、最初にいくつかの初期条件を述べます。
1. データベース テーブル構造にいくつかの特別な変更が加えられました。 友達のサークル コンテンツ テーブルには特別なフィールド ステータスがあり、値は 1 または 2 です。
値 1 は、友達のサークルが公開されていないことを意味します。 値 2 は、友達のサークルが公開されていることを意味します。 (なぜこれが行われるのか理解できない生徒は、先に読み続けてください。後で説明します)
実行プロセス全体について一般的に議論します:
publish.php) を公開します。このアップロード API (upload) では、画像がある場合、クライアントは追加のアップロード API (upload.php) も呼び出します。 .php) 作業が完了する前に、クライアントはリリースが成功したことを直接伝えます (実際には、アップロードは現在完了していません。アップロードを必死に支援するプロセスが背後にあります)。あなたが送信したテキストと写真を一時的に結合して表示します (現在、あなただけがそれを見ることができ、あなたの友達サークルの他の人は見ることができません)。その後、アップロード API (upload. php)/ もちろん、アップロードはタイムアウトする可能性があります (通常は 1 分以内に結果が表示されます)。失敗した場合は 1 分以内に送信失敗が報告されます。結果を待っていると、アップロードが失敗しない限り、後で通知されます。
それでは、このメカニズムを技術レベルで分析してみましょう:
右上隅の送信ボタンをクリックすると、2 つのプロセスが同時に開始され、そのうちの 1 つはテキストのアップロードを支援し、テキストが正常に送信されたことを通知します (
publish.php)。もう 1 つのプロセスは、送信した画像 (upload.php) を秘密裏にアップロードすることです。具体的なコードは次のとおりです。
Publish.phpリーリー
フィールドに基づいて 1 (未公開) と 2 (公開) の 2 つの状況があり、データ (list.php) を読み取るときはどうすればよいでしょうか。 表示ページは次のようになります:
Lists.phpリーリー
此处的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有所帮助,也请大家继续关注脚本之家。