オンライン コミュニケーション用の Web サイトを構築するときに、頭を悩ませる問題があります。それは、オンライン ユーザーのリアルタイムの統計に関するもので、現在のオンライン人数、訪問者数、会員数をカウントする必要があります。 、訪問者、メンバー、管理メンバーを含むオンライン ユーザーのリスト (訪問者の場合は訪問者の ID が自動的に生成され、メンバーの場合はメンバーの名前が表示されます)。リアルタイム性が求められるので、まずはglobal.asaを使って解決するというアイデアを渡します。
この問題の鍵は、ユーザーが退席したことをどのように判断し、ユーザーが退席したときにファイルまたは関数をどのように実行するかということです。
インターネット上で何人かの友人と話し合った後、最終的にこの問題を解決しました。
解決策の原則は次のとおりです。いわゆるユニバーサル ページとは、アプリケーション内のすべてのページにこのページが含まれることを意味します。このページには、XMLHTTP を使用してコードを記述します。コードは次のとおりです。現在のユーザーのオンライン時間を更新し、オンライン時間が一定時間を超えたユーザーを削除することを目的として、リクエストが 10 秒または 20 秒ごとにサーバーに送信され、データベース内のオンライン ユーザー レコードが一定の実際の時間を維持します。 -時間の性質。
主な実装方法は次のとおりです:
新しいデータベースを作成します。フィールド名は次のとおりです: id (文字)、name (文字)、user (番号)、tt (日付)、admin (権限コード、0-通常のユーザー、1-管理者)
table名前 :online
header.asp ↓
========================================== === ================
<%
... ...
if session("s_in")<>1 and session("s_name")="" then 'If
ユーザーはrs.open "select * from online",conn,3,3
に一度ログインします
。
rs.addnew
rs("id")=セッション.セッションID
rs("name")="ゲスト" & session.sessionID
rs("user")=0 '0 は、ユーザーがログインしておらず、訪問者であることを意味します。
rs("tt")=今
rs.アップデート
rs.close
session("s_in")=1 'ユーザーの情報がデータベースに保存されていることを設定し、オンラインであることを示します
end if
if session("s_name")<>"" then 'ユーザーがログイン ボックスを介してログインしている場合
rs.open "select * from online where id='" & session.sessionID & "'",conn,3,3
rs("名前")=セッション("s_name")
rs("admin")=session("s_admin") 'ユーザー名をメンバー名に更新します
rs("user")=1 'ユーザーがログインしており、メンバーであることを示します
rs("tt")=now '現在のシステム時刻をユーザーのログイン時刻に設定します
rs.アップデート
rs.close
end if
... ...
%>
... ...
<head>
... ...
<script language=javascript>
関数テスト()
{
var xmlhttp = new ActiveXObject("MSXML2.XMLHTTP");
xmlhttp.open("POST","onceonline.asp",false); //onceonline.asp に更新リクエストを送信します。
xmlhttp.setRequestHeader("CONTENT-TYPE","application/x-www-form-urlencoded");
xmlhttp.send();
}
setInterval("Test();",10); // 10 秒ごとに更新リクエストを送信します
</script>
... ...
</head>
... ...
============================== ============================
online.asp
<%
rs.open "オンラインから tt を選択します。ここで id='" & session.sessionID & "'",conn,3,3
rs("tt")=now() '現在のオンライン ユーザーのオンライン時間を更新します
rs.アップデート
rs.close
rs.open "オンラインから削除 (datediff('s',tt,now())>60",conn,3,1 'タイムアウト ユーザーを削除
%>
================================================ ==============
このように、データベース内のユーザーリストのリアルタイム性は基本的に保証されており、誤差は更新時間と削除時間の差に依存します。サーバーの処理速度に応じて削除をタイムアウトしないことをお勧めします。ユーザー間の時間間隔が短すぎると、オンライン ユーザー間でエラーが発生する可能性があります。
このソリューションは WIN2000+SQL Server2000 でデバッグされています。このソリューションには比較的大きなシステム要件があるため、他の友人がより良いソリューションを考え出して、この問題を一緒に解決してくれることを願っています。
私のメールボックス: [email protected]
私の名前は「Building Blocks」です。友達になることを歓迎します!