2010-08-30 17 views
9

Come posso mettere in atto un sistema di facebook-come-notifica: - Un userA scrive un messaggio al userB - Un ascoltatore sulle rotte del database il messaggio al userB - Sull'interfaccia utenteB, il messaggio appare immediatamenteUn sistema facebook-come-notifica in php

Come posso farlo in PHP?

La ringrazio molto,

saluti

+0

Ho davvero apprezzato le tue idee. Hai un pezzo di codice da condividere? Grazie ancora. – Zakaria

+0

È un sistema piuttosto complesso. La cosa migliore da fare sarebbe provarlo da solo e fare domande specifiche su dove ti trovi bloccato. Sarei felice di farti pagare la mia tariffa standard se vuoi che io scriva per te o ti siedi per un 1-on-1 virtuale. – bradenkeith

risposta

0

Si potrebbe fare questo uno dei due modi. In PHP il modo più semplice sarebbe "polling". Il nuovo metodo più recente utilizza HTTP Push con un server Comet; ma non è così eccezionale per PHP.

Per utilizzare il polling è sufficiente aggiornare una tabella nel database con il messaggio UserA contrassegnato come to-be consegnato all'utente b. Hai uno script in esecuzione ogni pochi secondi tramite ajax che esegue il polling del database per il messaggio sul client di userb. Se il messaggio è lì, lo si popola. Questo è molto inefficiente.

3

Ho un sistema che funziona bene impostato sul posto. E 'in sostanza ha il set-up in questo modo:

notification_id
id_utente
modulo
tipo_azione
added_by
leggere
read_date
aggiunto

Questo è un modo semplice di farlo. user_id è a chi appartiene, added_by è l'id utente di chi ha eseguito l'azione. Il modulo è dove è stato eseguito a, e action_type è quello che è successo (commento, cancellazione, aggiunta, ecc.). La lettura è se è già stata visualizzata e read_date è quando è stata visualizzata.

Ho quindi una classe che costruisce la verbosità in base a ciò che sono i valori di cui sopra.

Ho quindi impostato un crontab che ripulirà le vecchie notifiche nel database dopo tanti giorni.

0

Il server comet non è così semplice da scrivere in PHP, ma è possibile farlo utilizzando il sonno. Ci sono anche funzioni di socket che possono essere utili:

nota che si dovrebbe essere consapevoli del limite di tempo. Forse dovresti smettere di appendere dopo un po 'di tempo e fare una nuova richiesta, a meno che tu non possa disabilitare il limite di tempo per queste richieste.

La soluzione può anche dipendere dall'ambiente. Probabilmente non puoi fare molte cose utili sul solito web hosting condiviso.

+1

Questa è un'idea orribile. PHP non è orientato verso lunghi sondaggi. –

0

Come accennato da akellehe, è possibile semplicemente eseguire il polling utilizzando Ajax per cercare nuovi contenuti se gli utenti rischiano di rimanere sulla stessa pagina per lunghi periodi di tempo. Se la consegna in tempo reale assoluta non è necessaria, è molto più efficiente controllare nuove notifiche quando la pagina viene ricaricata, specialmente se si memorizza nella cache (ad es.memcached) gli eventi totali in attesa di un utente e invalidano tale conteggio solo nel caso in cui qualcosa venga aggiunto alla loro coda di notifica. Ciò ti farà risparmiare molte query sul database a mani vuote.

7

Non è consigliabile utilizzare il polling o provare a implementare una soluzione basata su push utilizzando PHP, se si ha un traffico considerevole. Quello che succede è che alla fine tutti i processi di PHP vengono bloccati e quindi non puoi più servire le richieste web.

Cerca in node.js, cometd o un'altra soluzione basata su push. Se hai bisogno di qualcosa di semplice e hai bisogno di alzarti e correre velocemente, ti consiglio lo http://pusherapp.com/. Hanno un client PHP disponibile e un'API super semplice.

0

Al giorno d'oggi molto possibile. So che questa risposta arriverà molto tardi, ma aiuterà coloro che vedranno questa pagina come aiuto. Controlla il link sottostante per un ottimo tutorial Real Time Notification Like Facebook

0

Al giorno d'oggi la soluzione migliore è usare socket.io (http://socket.io/). Sceglie automaticamente il modo migliore (e possibile!) Per trasferire dati, tra cui: WebSocket, Adobe Flash Socket, polling Ajax. Davvero non ti preoccupare della disponibilità dei metodi di comunicazione sul lato client.

Problemi correlati