2017-10-15 3 views
2

Webアプリケーションを構築してください。他のユーザーが使用しているリソースの可用性を確認してください

UserAが既にResource1を使用している場合、ユーザーはブラウザを使用して共有リソースホストにアクセスできますが、UserAがResource1を解放するまで、または指定された時間が経過するまで、UserBはResource1を使用できません。

ここでは、タプル(リソース、currentuser)のリストを含むMySQLテーブルを使用し、期限切れのタプルを削除するためにcronタスクを実行することを選択しました。

UserBがResource1にアクセスすることをUserAに通知し、UserAからの応答がない場合、UserAはResource1に対するロックを失い、次にUserBにリソースを利用できます。

この部分では、AJAXを使用する必要があります。

ユーザーのブラウザ彼がまだ生きていることを証明するために定期的なAJAXコール(毎分)を行い、別のユーザーが同じリソースを要求した場合、サーバーに挑戦する必要があります所定の時間内にリクエスト(例えば、キャプチャ)。チャレンジが失敗した場合は、ユーザーがここにいなくなったことを意味します(ブラウザを開いたままにするか、ウェブページを非表示にしたままにしておくこともできます)。

「難しいのは、特定の時間内にサーバー要求に挑戦しなければならない(例えば、キャプチャ)」です。どうやってするか?

私は最良の経路に従っていますか?

答えて

1

はい、概説したとおりです。 ajaxを使用することは、特に毎分ポーリングするだけでは、まったく問題ありません。

setInterval(function() { 
$.get('/resource/status', function(response) { 
    if (response.data.newRequest) { 
     //This would signal a new request to the resource 
    } 
}) 
}, 60000) 

リソースにアクセスするための新しい要求を処理するとき、あなたはreCaptchaのようなものを使用し、しかし、適切な(オーバーレイまたはインライン)ことを表示することができます。たとえば

は、あなたが以下の持っていると言います。これを行うと、タイマーを開始して、割り当てられた時間を超過しているかどうかを判断することもできます。もしあれば、別のAjaxリクエストを行い、この人のリソースへのアクセスを取り消すこともできますが、それを処理したいことがあります。

0

私はリソースを取得する必要があるすべてのユーザーを制御するためにWebソケットを使用します。 あなたは誰が接続されているかを知ることができます。リソースを使用し終わったら、次のユーザーにリソースなどを知らせることができます (この方法で、各ユーザーに時間がかかるリソースを取得し、いくつかの進捗バーを行います)

0

私はここに2つの問題があると思います。

  1. リソースが利用可能になったことをユーザーに通知する方法を教えてください。 定期的なAJAXリクエストは問題ありませんが、長いポーリングやWebソケットを待機中のユーザーにリアルタイムで通知することもできます。

  2. リソースがユーザーによって使用されていることを確認するにはどうすればよいですか? 人間のユーザーがページ上で何もしていない瞬間を捉えたい場合は、マウスの動き/クリックやキーボードのボタンを押して追跡できます。最後のn分間何もしないと、ページはアクティブではないとみなされます。 ページが自動化されたソフトウェアによって悪用されないようにするには、リソースが使用されているときにn分後にcaptchaを記入してください。

関連する問題