La domanda breve è: è vero che per il funzionamento di Observer Pattern, probabilmente c'è qualche meccanismo di polling sotto? (aggiornamento: in una situazione di rete)
È stato piuttosto sorprendente che se sul mio Macbook Pro salvassi un file Hello World.txt
nella cartella Dropbox, in realtà lo vedo comparire sul mio altro MacBook entro 1 secondo o 2.
È ancora più sorprendente che, sull'altro Macbook, se eseguo una ricerca su Hello
come corrispondenza del nome, e che Hello World.txt
venga visualizzato lì come risultato di ricerca, ora vado sul mio Macbook Pro e rinominare il file come Hello World HiHi.txt
, dopo 1 secondo o 2, quindi il nuovo nome viene effettivamente mostrato nel risultato della ricerca dell'altro Macbook. Cioè, i risultati della ricerca probabilmente osservano le modifiche di ogni cartella e la cartella osserva nello stato Dropbox le modifiche in remoto sul sito Web di Dropbox.
Quindi immagino che l'app Dropbox abbia probabilmente una connessione TCP / IP a due vie in modo che il server Dropbox possa avviare un messaggio all'app di Dropbox in background del mio Macbook, dicendo "Ehi, il contenuto della cartella è cambiato sul server ", quindi l'app di Dropbox in background sul mio Macbook eseguirà la ridenominazione e l'oggetto della cartella (il modello o l'oggetto dati) invierà una notifica all'oggetto della cartella di ricerca," Ehi, il mio contenuto è cambiato "e la cartella di ricerca l'oggetto notificherà quindi l'oggetto vista cartella, dicendo "Ehi, il risultato della ricerca è cambiato (e quindi probabilmente vorrai aggiornare la vista sullo schermo)".
Quindi penso che forse è più o meno come ha funzionato? Ma la domanda è, se non ci fosse alcuna connessione TCP / IP a due vie, allora è vero che l'app di Dropbox in background dovrà interrogare il server Dropbox ogni 1 o 2 secondi per chiedere "ha fatto qualcosa cambiato?" E questo sarà troppo impegnativo per il server Dropbox.
Tuttavia, non è vero che nonostante ci sia una comunicazione bidirezionale, alcuni in basso sotto i livelli TCP / IP (i 7 livelli OSI), c'è qualche tipo di polling?
Ad esempio, il server Dropbox, a un livello molto basso, non può spingere un elettrone sul mio router, notificando il mio Macbook, perché se c'è un firewall, allora in qualche modo, da parte mia, ci deve essere una sorta di polling a basso livello, altrimenti il server Dropbox non può passare attraverso il mio firewall.
Oppure, se visualizzato in questo modo: se sto usando il WiFi sul mio Macbook, probabilmente non c'è alcun meccanismo del server Dropbox che spinga qualcosa al mio router wireless, e quindi usi l'onda elettromagnetica per spingere sul mio MacBook, per avvisarmi? Cioè, il mio Macbook deve continuamente chiedere al router wireless, "qualsiasi cosa nuova per me?" Perché se il Macbook non chiede: se il Macbook si è bloccato o se il firmware wireless del Macbook si è bloccato e non si sta chiedendo, non c'è davvero alcuna "spinta dei dati" dal router wireless al Macbook. Il Macbook deve davvero "chiedere continuamente".
Non è simile al caso che, se JavaScript su un browser non avesse una connessione bidirezionale (prima di HTML5), in qualche modo possiamo ancora avere il server web "notifica il codice JavaScript del browser", ma ci saranno alcuni tipo di polling sotto scritto in JavaScript, per simulare una connessione a due vie?
Aggiornamento: non intendo il polling necessario per il server, ma intendo solo che un qualche tipo di meccanismo deve costantemente guardare per vedere se c'è qualcosa di nuovo , se è Observer Pattern all'interno del codice in una app, quindi la CPU "salterà" semplicemente il codice per eseguire il codice dell'osservatore, e quindi l'osservatore non deve fare assolutamente nulla. Ma per modello di Observer su una rete, ciò che intendo è, ad esempio, se si dispone del proprio computer notebook tramite Wifi e si spegne il Wifi, quindi il Pattern di Osservatore non funzionerà. Ora accendi il Wifi, ma il firmware o l'hardware del Wi-Fi devono davvero "sentire" se è arrivato qualcosa di nuovo, perché il segnale Wifi non ha modo di "forzare il computer", non come il processore Intel può semplicemente "saltare" "a un pezzo di codice. Quindi, se il firmware o l'hardware devono costantemente "sentire" se c'è qualcosa di nuovo, questo è ciò che intendo per sondaggio: l'Observer non può essere totalmente in attesa; alcuni meccanismi devono controllare costantemente qualcosa.