まず第一に、ユーザー数を保存するためにステートフル バックエンドが必要です。つまり、php+任意のデータベースです。
nodejs上に構築されたsocket.ioについて言及しました。
nodejs を使用すると、シングル スレッドのランタイムであるため、これは難しくありません。そのため、変数値を異なるクライアントと共有できます。
nodejs は 3 つの URL をリッスンする必要があります。
- ベースページを渡すため(nodejsなしで実行でき、htmlへのURLのみ)
- ボタンのクリックをクライアントからバックエンドに渡すための ajax URL、現在のカウントを返す
- 現在の秒数を渡す ajax url は、現在のカウントと接続ユーザーを返します。
2. チャネルが呼び出されるたびに、カウントダウンがすでに実行されているかどうかを確認する必要があります。そうでない場合: 開始し、そうでない場合はクリックされたカウンターを増やします。
このような:
//nodejs code
var currendSeconds=60;
var connectedClients = 0;
var threadid;
function clientClickedButton(req, res){ // 2. url
if(currendSeconds==60 || ) {
threadid = setInterval(function(){
currendSeconds--;
if(currentSeconds == 0){
clearInterval(threadid);
}
}, 1000); //your counter
}
connectedClients++;
res.send(currendSeconds);
}
クライアント側はボタンのクリックイベントをリッスンし、ajax req を 2.url に送信し、返された秒数を表示する必要があります (今後は、秒数を要求する必要はありません。現在の秒数を要求せずに、クライアント側でカウントダウンを設定するだけです. )