傳統模式下網頁對數據庫的讀寫相似於下面這種:
mysql
張三經過瀏覽器訪問web服務器,修改數據;react
web服務器把新數據寫入數據庫;git
李四並不知道數據庫是否有變化,他必須刷新瀏覽器頁面,瀏覽器訪問服務器;github
服務器再次訪問數據庫;web
數據庫把新的結果返回給服務器;sql
服務器返回新頁面給李四。數據庫
meteor提供了一種新的思路:
瀏覽器
張三經過瀏覽器訪問web服務器;服務器
web服務器把新數據寫入數據庫;websocket
數據庫通知web服務器有新數據產生;
web服務器通知瀏覽器有新數據,瀏覽器自動變化頁面,李四就看到結果了。
在後面一張圖中,第4步的動做比較好理解,就是經過在web服務器和瀏覽器之間創建一條websocket
通道,就能實現服務器和瀏覽器之間的雙向通信。
奇怪的是第3步,數據庫是怎麼通知web服務器有數據變化的呢?
當你在安裝meteor-mysql
插件後,再次啓動meteor
時,它會不停地告誡你:你須要開啓mysql
的bin_log
。mysql的bin_log
是幹什麼用的呢?幾乎全部資料都會談到什麼主從架構。
實際上,meteor
在這裏只是把本身假裝成是一個mysql
的從服務器。你們都知道,數據庫的主從服務器是須要數據同步的,也就是說當主mysql服務器的數據發生變動時,它會以bin_log
的形式通知從服務器,從服務器只須要檢查這個bin_log
就知道主服務器發生變動了。
因此,若是你沒有開啓bin_log
的話,meteor
也能夠知道數據庫的變化,只不過是用一種比較笨拙的輪詢方式。而若是開啓bin_log
的話,meteor
再也不以輪詢方式訪問數據庫,而是等待主服務器向本身推送數據了。
我這裏寫了一個簡單的例子,meteor
如何鏈接mysql
數據庫,感興趣的能夠嘗試一下。