songEagle開発シリーズ:ブログ記事をリアルタイムで保存する方法
3575 ワード
一、前に書く
文章のリアルタイム保存を実現するにはどうすればいいですか?一般的に文章を書くブログを書くサイトにはこの機能点があり、ユーザーがうっかり退出した場合のデータの保存を保証し、このようなインタラクションはユーザーの使用心理学に合っている.ユーザーにとってこれは非常に実用的な機能であり、ブログとしてはこれがあればいいのではないでしょうか.ははは^^;
二、実現の構想
1つの機能の実現、あなたのプログラミングの構想はとても重要で、あなたのcodingの前の設計を決定して、構想はあなたのプログラミングの設計です.
三、主なコード
const SocketIO = require('socket.io');
const config = require('../config/environment');
const DraftRedis = require('./draft-redis');
const redisMysql = require('./redis-mysql');
const draftPostRedisKey = config.draftPostRedisKey;
exports.initSocket = function (server) {
console.log('init websocket');
//socket.io
let socketHandle = SocketIO(server, {
serveClient: true,
path: config.socketioPath
});
let draftRedis = new DraftRedis(config.db.redis);
socketHandle.on('connection', function (socket) {
console.log('socket connected');
//
socket.on('disconnect', function () {
console.info('[%s] DISCONNECTED', socket.sid);
});
// , ( )
socket.on('getDraftPost', async function () {
let data = await draftRedis.get(draftPostRedisKey);
if (!data) {
data = await redisMysql.getDraftPostFromMysql();
socket.emit('getDraftPost', data);
await draftRedis.set(draftPostRedisKey, data);
} else {
socket.emit('getDraftPost', data);
}
});
//
socket.on('saveDraftPost', async function (data) {
let res = await draftRedis.set(draftPostRedisKey, data);
socket.emit('saveDraftPost', res);
});
//
socket.on('clearDraftPost', async function () {
await draftRedis.destroy(draftPostRedisKey);
await redisMysql.clearDraftPostOfMysql();
socket.emit('clearDraftPost', true);
});
});
};
四、方法説明
redisToMysqlTaskメソッド:redisデータをmysqlデータにタイミング同期するメソッドnode-scheduleライブラリを使用してタイミング同期を実現
getDraftPostFromMysqlメソッド:redisに存在しないデータの場合、mysqlからデータを問い合わせる
clearDraftPostOfMysqlメソッド:mysqlからデータを削除し、記事保存後の操作
4、/src/main.js
ブラウザ側はsocket.をインポートする.io,vue-socketを用いる.ioとsocket.io-clientライブラリ
import VueSocketio from 'vue-socket.io';
import socketio from 'socket.io-client';
Vue.use(VueSocketio, socketio('http://localhost:9000', {
path: '/testsocketiopath'
}));
5、/src/pages/edit.vueはwebsocketを用いてサービス側からデータを取得し,サービス側にデータを転送して保存する