通常用來寫東西的網站都會有一個編輯實時保存的功能。對於使用者來講是一個很是實用的功能。做爲一個我的博客來講,雖然用處沒那麼明顯,可是仍是想實現一下這個功能,就當是練練手吧。javascript
WebSocket
來進行瀏覽器與服務器的實時通訊;Redis
來緩存實時編輯的文章(編輯時文章改動頻繁,頻繁讀寫數據庫操做不是個好的方案);Redis
緩存的數據存儲到MySQL
數據庫中;WebSocket
從服務端獲取數據(先從Redis
中查找,若是沒有則再從MySQL
數據庫中查找);Vue.js
的watch來監聽文章的變化,變化時使用WebSocket
向服務端傳送數據。Redis
和MySQL
中實時保存的數據。Talk is cheap. Show me the code.vue
- 本功能只是我的博客後臺使用,沒有多帳戶體系,因此
Redis
和MySQL
中都是保存一條記錄。若是須要按不一樣用戶來保存的話,須要自行開發。- 代碼比較多,具體的代碼就不貼了,有興趣的能夠去
個人GitHub
上查看源碼。這裏只說明一下各個文件中代碼的用處。
服務端WebSocket
服務,使用了socket.io
庫。java
Redis
的set
和get
的公共方法。node
redisToMysqlTask
:定時同步Redis
數據到MySQL
數據的方法,使用了node-schedule
庫。getDraftPostFromMysql
: Redis
中不存在數據時,在MySQL
中查詢數據。clearDraftPostOfMysql
:從MySQL
中刪除數據(文章保存後操做)。瀏覽器端先引入socket.io
,使用了vue-socket.io
和socket.io-client
庫。mysql
import VueSocketio from 'vue-socket.io'; import socketio from 'socket.io-client'; Vue.use(VueSocketio, socketio('http://localhost:9000', { path: '/testsocketiopath' }));
使用WebSocket
從服務端獲取數據,並實時將數據傳輸到服務端進行保存。git