2017-02-24 2 views
2

昔、ゴランと一緒にウェブサイトを構築しましたが、現在オンラインユーザーを追跡したいと考えています。ゴランのオンラインユーザーを追跡する

私はRedisとSessionIDを使用しないとこれを行う必要があります。

私の仕事にはどのような方法が良いですか?

type Tracker struct { 
    http.Handler 
} 

func NewManager(handler http.Handler) *Tracker { 
    return &Tracker{Handler: handler} 
} 

func (h *Tracker) ServeHTTP(w http.ResponseWriter, r *http.Request) { 
    log.Println(r.RemoteAddr) 
    h.Handler.ServeHTTP(w,r) 
} 

は、私は、グローバルハンドラを書きました。 。 。

クライアントにセッションIDを追加し、サーバーにマップに保存し、オンラインユーザーをカウントし、そこに次

srv := &http.Server{ 
     Handler:  newTracker(e), 
     Addr:   "127.0.0.1" + port, 
     WriteTimeout: 15 * time.Second, 
     ReadTimeout: 15 * time.Second, 
    } 

    log.Fatal(srv.ListenAndServe()) 

私は私が行うことができます仕事の一つだと思います。

いいですか?

答えて

3

グローバルハンドラ、ミドルウェア(ルータのpkgを使用している場合)または人気のあるページで統計機能を呼び出すだけで十分です。ボット、RSSヒット、または気にしない他のトラフィックを除外するように注意してください。

あなたは1つのプロセスがあり、最後の5分かそこらでオンラインでユーザーを追跡したいと思うなら、地図サーバー側は問題ありません。トークンを発行できます(ユーザーがCookieを許可し、 、またはちょうどハッシュip(かなりうまく機能し、わずかな過小カウントの可能性があります)。その後、間隔を置いて有効期限を切る必要があります。ミューテックスを使用して保護してください。再起動するとカウントが失われます.2つのプロセスを実行することができない場合、これはメモリストレージの欠点です。他のプロセスを維持する必要があります。したがって、これは大規模なサイトには適していませんが、後でより永続的なストアを使用するように簡単に移行できます。そのような

var PurgeInterval = 5 * time.Minute 
var identifiers = make(map[string]time.Time) 
var mu sync.RWMutex 

...

// Hash ip + ua for anonymity in our store 
hasher := sha256.New() 
hasher.Write([]byte(ip)) 
hasher.Write([]byte(ua)) 
id := base64.URLEncoding.EncodeToString(hasher.Sum(nil)) 

// Insert the entry with current time 
mu.Lock() 
identifiers[id] = time.Now() 
mu.Unlock() 

...

// Clear the cache at intervals 
mu.Lock() 
for k, v := range identifiers { 
    purgeTime := time.Now().Add(-PurgeInterval) 
    if v.Before(purgeTime) { 
     delete(identifiers, k) 
    } 
} 
mu.Unlock() 

何か。

+0

あなたの完璧な説明をいただきありがとうございます。私のウェブサイトでサインインしていないユーザーごとに排他的なIDを設定するにはどうすればよいですか?おそらく、多くのユーザーが単一のIPアドレスを使用し、リモートポートが多すぎます。手伝って頂けますか ? – ahmdrz

+1

本当に大きな問題ではありませんが(これは私が言及したやや少数ですが)、idのハッシュにユーザーエージェントを追加するか、ランダムトークンを生成してクッキーに入れることができますが、 。例に追加します。 –

+0

偉大な男!ありがとうございます、ハッシュされたユーザーエージェントは特別なハッシュです。 – ahmdrz

関連する問題