Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Vue.js + socket.io で簡単に実装できるリアルタイム更新処理 / Coral Developers Night #1

Vue.js + socket.io で簡単に実装できるリアルタイム更新処理 / Coral Developers Night #1

Takamichi Aso

October 16, 2019
Tweet

More Decks by Takamichi Aso

Other Decks in Programming

Transcript

  1. Credit Engine, Inc. 2019/10/16 2 今日話す内容(言いたいこと)
 • 便利なライブラリを使って素早く開発しよう
 
 •

    ムチャ振りされたらチャンスですよ!
 
 • 後々のためにしっかりと設計しよう

  2. Credit Engine, Inc. 2019/10/16 3 自己紹介
 クレジットエンジン株式会社
 麻生 隆道(あそう たかみち)


    
 たぶんフルスタックエンジニアやってます
 趣味はプログラミングで、
 最近はFlutter(iOS/Androidのアプリを同時に かけるやつ)にハマってます!
 
 前職は12年ほど組み込みエンジニアやってま したー

  3. Credit Engine, Inc. 2019/10/16 • 日々メモリ破壊と戦う人たち
 
 • ログ・メモリダンプとお友達
 


    • デバッグに強い(たまにログ無しでデバッグとかも)
 
 モダンなライブラリとか使えない環境でツラい
 デバッグスキルだけが高くなっていったような気が・・・
 4 組み込みエンジニアってどんな人たち?(偏見含む)

  4. Credit Engine, Inc. 2019/10/16 Credit Engine の紹介
 5 “かす”をかえる。“かりる”をかえる。
 ミッション


    中小事業者が融資を受ける際には
 様々な紙ベースの書類が必要であった
 
 オンラインで完結するので簡単に使え
 空いた時間で本来の事業に集中できる

  5. Credit Engine, Inc. 2019/10/16 どうやって実現するか?
 最初は Django Channels で WebSocketやろうかと思ったけど


    
 socket.ioの方が以下のようなことができて良さげでした!
 • WebSocket と LongPolling を自動で切り替えてくれるので WebSocketに制限のある環境でも使える
 • 再接続などもライブラリ側でやってくれるので簡単に使える
 
 11
  6. Credit Engine, Inc. 2019/10/16 まずやったこと
 公式ページの Get Started を見て徐に git

    pull してサンプルを動かしてみる
 約1時間位でサンプル動作確認&ドキュメント内容を理解する
 
 13
  7. Credit Engine, Inc. 2019/10/16 あとは実装するだけ(こんな感じです)
 クライアント側(16行)
 14 var app =

    require('express')() var http = require('http').Server(app) var io = require('socket.io')(http, { path: '/pathto/socket.io' }) var axios = require('axios') const SERVER_PORT = process.env.SERVER_PORT io.on('connection', socket => { socket.on('event', msg => { console.log('event: ' + msg) io.emit('event', msg) }) }) http.listen(SERVER_PORT, () => { console.log('Socket.IO on *:' + SERVER_PORT) }) import io from 'socket.io-client' var socket = io({ path: '/pathto/socket.io', query: { token: token } }) socket.on('event', message => { let event = JSON.parse(message) switch (event.name) { case 'lock': // ロック時の処理 break case 'unlock': // ロック開放時の処理 break } }) function sendEvent (payload) { socket.emit('event', JSON.stringify(payload)) } サーバ側(14行) ※socket.io部分以外は省略しました

  8. Credit Engine, Inc. 2019/10/16 APIサーバと分かれてしまうので認証がない・・・
 認証用のミドルウェアをサーバ側に追加
 15 const AUTH_URL =

    process.env.AUTH_URL io.use((socket, next) => { let token = socket.handshake.query.token; console.log('token: ' + token) axios.post(AUTH_URL, { token: token }, { withCredentials: true }).then(() => { console.log('Authentication success') next() }).catch(() => { console.log('Authentication error') next(new Error('Authentication error')) }) }) API サーバ オペレーター画 面
 socket.io

  9. Credit Engine, Inc. 2019/10/16 socket.ioが死んでも大丈夫
 17 API サーバ オペレーター画 面


    socket.io
 socket.io のサーバは通知の機能だけに専念
 API サーバ オペレーター画 面
 socket.io
 止まってもロック機能自体は問題なく動く

  10. Credit Engine, Inc. 2019/10/16 21 今日話した内容(言いたかったこと)
 • 便利なライブラリを使って素早く開発しよう
 
 •

    ムチャ振りされたらチャンスですよ!
 
 • 後々のためにしっかりと設計しよう

  11. Credit Engine, Inc. 2019/10/16 ここが良いよね!Flutter
 • ホットリロードが便利でめちゃ早い
 • ネイティブにコンパイルした後の動作が早い(らしい)
 •

    UIもDartで書くのでプログラマ的には書きやすい
 
 Dart言語はスクリプト言語としても動くのでホットリロードもできる が、コンパイル言語の側面もあるのでネイティブにすると早いらしい
 25