nik1992 Δημοσ. 9 Σεπτεμβρίου 2008 Δημοσ. 9 Σεπτεμβρίου 2008 Θελω να φτιαξω ενα script που θα λεει ποσοι χρηστες ειναι τη συγκεκριμενη στιγμη στην σελιδα με το chat στο φορουμ μου. Και μετα να βαλω στην αρχικη ενα κουτακι που να λεει CHAT: χχχ online users η σελιδα ειναι αυτη http://schooliki.com/index.php?action=chat Ξερει κανενας καποιο ετοιμο ή πρεπει να το φτιαξω μονος μου?
HighT3ch Δημοσ. 9 Σεπτεμβρίου 2008 Δημοσ. 9 Σεπτεμβρίου 2008 Καταρχήν θα πρέπει να μπορείς να αναγνωρίζεις τους χρήστες κάτι το οποίο υποθέτω έχεις ή ξέρεις να το κάνεις. Μετά θα πρέπει να μπορείς να αναγνωρίζεις ποιοί χρήστες ειναι συνδεδεμένοι σε μία δεδομένη στιγμή. Θα πρέπει με κάποιο μηχανισμό να κάνεις track τον κάθε χρήστη απο την ώρα που κάνει login μέχρι την ώρα που θα φύγει. Συνήθως κάτι τέτοιο γίνεται με το να καταγράφεις σε ένα table το timestamp την ώρα που μπήκε, να ανανεώνεις αυτό το timestamp καθ'ολη την διάρκεια που αυτός γράφει κλπ και να μετράς την διαφορά του timestamp με την τρέχουσα ώρα. Αν αυτή η διαφορά είναι μεγαλύτερη ενός timeout time που θα ορίσεις, αυτός ο χρήστης θα θεωρείτε offline. Όσων τα timestamps είναι μέσα στα όρια του timeout time αυτοί θα θεωρούνται ενεργοί και αυτοί θα είναι που θα πρέπει να γίνονται count και να φαίνονται ως active στο chat. Στην δική σου περίπτωση το chat είναι εν είδη standalone εφαρμογής που βασίζεται σε socket binding και δεν σχετίζεται με τα μέλη του forum σου - ο καθένας μπορεί να το χρησιμοποιεί άσχετα με την ιδιότητα του στο site σου, ακόμα και guests. Επειδή δεν έχεις την δυνατότητα να μεταβάλεις των κώδικα της εφαρμογής, η επόμενη καλύτερη κίνηση είναι να προσθέσεις κάποιο logic (σαν και αυτό που ανέφερα παραπάνω) στην σελίδα που κρατάει το chat application. Επειδή ούτως η άλλως ο user θα πρέπει να έχει ανοιχτή την σελίδα αυτή για να έχει πρόσβαση στο chat θα μπορούσες να κάνεις track το state του έτσι. Το μόνο κακό είναι οτι επειδή άπαξ και ανοίξεις το chat το υπόλοιπο site παραμένει "ανενεργό" δεν μπορείς να κάνεις refresh το timestamp με κάποιο κομψό τρόπο. Ο μόνος τρόπος που σκέφτομαι τώρα στα γρήγορα είναι να έχεις ενα κρυφό iframe μέσα στην σελίδα (στο οποίο θα φορτώνεις το script σου) το οποίο θα κάνει silently refresh κάθε ενα λεπτό ας πούμε, ανανεώνοντας το timestamp του χρήστη. Σε περίπτωση που ο χρήστης φύγει απο την σελίδα ή κλείσει τον browser το timestamp του δεν θα ανανεώνεται πλέον και θα μπορέσεις να τον βγάλεις απο την λίστα των online users. Ελπίζω να σου έδωσα μια πρώτη ιδέα για το πώς μπορεί να γίνει.
nik1992 Δημοσ. 9 Σεπτεμβρίου 2008 Μέλος Δημοσ. 9 Σεπτεμβρίου 2008 χμμμ, δν μπορω να πω οτι καταλαβα πολλα... Σαν σκεψη την καταλαβα τωρα τα timestamp κτλ δεν τα ξερω...
alex2005 Δημοσ. 9 Σεπτεμβρίου 2008 Δημοσ. 9 Σεπτεμβρίου 2008 Το timestamp είναι η στιγμή που ο χρήστης έκανε την τελευταία ενέργεια στο site, κατά προτίμηση σε ακρίβεια λεπτού ή δευτερολέπτου. Αυτό στην SQL υλοποιείται ως ένα πεδίο DateTime και μπορείς πολύ εύκολα να ορίσεις το timestamp την στιγμή που εκτελείται το query ως CURRENTTIMESTAMP().(Σε MySql, για άλλες ΒΔ υπάρχουν αντίστοιχες εντολές) Τυπικά αυτο που περιγράφει ο HighT3ch μπορείς να το κάνεις με έναν πίνακα δύο στηλών. Η μία στήλη θα περιέχει το username του χρήστη (foreigh key) και η δεύτερη ένα πεδίο DateTime. Όταν θέλεις να δεις ποιοι χρήστες είναι συνδεδεμένοι στο forum τότε αναζητάς στον πίνακα αυτό τους χρήστες που έχουν ως timestamp : CURRENTTIMESTAMP() - USERTIMESTAMP < x χρονικό διάστημα. Ελπίζω να είναι τώρα καλύτερα κατανοητό.
HighT3ch Δημοσ. 9 Σεπτεμβρίου 2008 Δημοσ. 9 Σεπτεμβρίου 2008 Εννοώ την ώρα σε μορφή Unix timestamp. Πχ η ημερομηνία-ωρα: 2008-09-09 13:26:51 = 1220956011 Πρέπει να διαβάσεις στο php manual πως να τα χρησιμοποιείς αυτά ή μέσω MySQL
alex2005 Δημοσ. 9 Σεπτεμβρίου 2008 Δημοσ. 9 Σεπτεμβρίου 2008 Συγνώμη έκανα λάθος στο προηγούμενο post. Η εντολή είναι : CURRENT_TIMESTAMP()....σε MySql πάντα
nik1992 Δημοσ. 9 Σεπτεμβρίου 2008 Μέλος Δημοσ. 9 Σεπτεμβρίου 2008 χμμμ,νομιζα οτι ηταν πολυ πιο ευκολο... επειδη απο αυτα δεν εχω ιδεα, βρηκα ενα ετοιμο... Παντως ευχαριστω...
Προτεινόμενες αναρτήσεις
Αρχειοθετημένο
Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.