現在検討している内容
php:7.3.8
MYSQL:5.7.26
Wwb Server:Apache
現在、試作で同じ記事(input type="POST"を含むページ)を複数人のユーザーが編集できる様にするサービスを検討しております。イメージとしてはwikipediaに近いのですが、編集や更新ができる人はもう少しcloseされた(例えば10人くらい)ものを想定がコンテンツをinput type="post"
を通じて更新していき
0. 複数人ユーザーがMYSQLにINSERT INTO
されて蓄積していく最新のものはstatusカラムに1フラグが立ち、それ以外のものは0フラグが立つ
- 同ページではstatusフラグが1のものが最新のものといて表示され、そこからまたユーザーがさらに更新をかけていき繰り返される
- チャットサービスを構築するときにリアルタイム共同編集の様な 使用やAPIは想定しておりません。
さて、ここで一つ迷っていることがあるのですが、複数ユーザー同士の更新内容のコンフリクトです。
基本的には、誰かが更新している(ページを開いている)ときにはINSERT INTO
を2番手以降の人は実行させない等は現実的ではないので、
誰かが更新しているとき(誰かが自分より先にそのページを開いている)に2番目以降に開いているひとに通知をする方式を取ることを要件として想定しております。
まだ、PHPで誰かが開いたときにmysqlでcurrentTimeStamp等で開いた時間を記録して、更新してinput type="post"
を送信したときに同じ様にcurrentTimeStamp等で閉じた時間を記録すれば、その間に誰かが同じページを開いたユーザーには誰かが編集しているかもしれないということを通知はできると思いました。
ただ、問題は急にブラウザを閉じたりパソコンの電源を落とされたりしたらどうやって閉じる時間をサーバーに送信するのかが「php ブラウザ 閉じる 識別」などで検索しても見つけることができませんでした。
ご質問
- php等サーバーサイドで誰かがページを開いていることや(ブラウザを)閉じたことを識別することは可能なのでしょうか?
- 上記#1の可否にかかわらず、他のユーザーが今作業していることを一般的に他のユーザーが同じページを開いたときにコンフリクトを回避する様な一般的なアイデア等はあるものなのでしょうか?(今回はコンフリクトを受け入れて、最後に送信を押した内容を最新のコンテンツとして取り扱おうとは考えているのですが)
まだ、初心者で拙い表現で申し訳ないのですが、お知恵をお借りできればとても嬉しいです。
よろしくお願い申し上げます。
回答1件
あなたの回答
tips
プレビュー