SlideShare a Scribd company logo
1 of 18
Download to read offline
Node.js でサクッと
WebSocket
澤井 友恵
@tomoeine
自己紹介
フリーランスWebエンジニア
澤井友恵 @tomoeine
● 宮崎の山の中でリモートワーク
● 東京生まれ東京育ち
● 趣味は岩登り(ボルダリング)
● 岩がきっかけで宮崎へ夫婦で移住
● Laravel, Vue.js, Rails, AWS 等
自己紹介
WebSocket
is 何
自己紹介 前提として
SNS、チャットアプリケーション等
インタラクティブ
(双方向・対話的)
なWebサービスが増えた
いいね❤
自己紹介HTTP でインタラクティブ性を実現したい
● HTTPは 1. リクエスト 2. レスポンス
で処理が完結する
プロトコル自体が双方向ではない
リクエスト
レスポンス
自己紹介HTTPでインタラクティブ術『ポーリング』
● HTTPリクエストを一定間隔で送ることで、
リアルタイムなデータを取得する方法
● JavaScript では setInterval を使ったり
$(function(){
setInterval(function(){func();},1000);
});
function func(){
$.getJSON('/path/to/ajax', function(json){
console.log(json);
});
}
リクエスト
レスポンス
リクエスト
レスポンス
・
・
・
自己紹介HTTPでインタラクティブ術『ロングポーリング』
● 1つのHTTPリクエストに対して、
チャンク形式のレスポンスを返し続ける
(接続を終了させない)
リクエスト
レスポンス
レスポンス
・
・
・
Stripe PHP vs Laravel Cashierそれでも・・・
HTTPリクエストのヘッダが大きく通信負荷がかかる
ロングポーリングはサーバーへの負荷が大きい
双方向通信はできない
自己紹介 そこで WebSocket
● 双方向通信用のプロトコル
● 接続を確立後はクライアント・サーバーで
双方向に通信できる
● ヘッダは最大でも14Byte!
● サーバーへの負荷が少ない
WebSocket
をサクッと実装してみよう!
自己紹介 プロジェクトの初期化
// プロジェクトを作る
$ mkdir websocket
$ cd websocket
$ yarn init -y
// WebSocket のライブラリをインストール
$ yarn add ws
自己紹介WebSocket サーバー側のコード
const WebSocket = require('ws');
const wss = new WebSocket.Server({ port: 8080 });
wss.on('connection',function(ws){
// クライアントからメッセージを受け取った
ws.on('message',function(message){
console.log("Received: " + message);
// クライアントにメッセージを送る
wss.clients.forEach(function(client){
client.send(message + ' : ' + new Date());
});
});
});
自己紹介 クライアント側のコード
<input type="text" id="message" />
<input type="button" id="send-button" value="Send" />
<h5>Received Message</h5>
<p id="received-message"></p>
<script>
const sock = new WebSocket('ws://127.0.0.1:8080');
sock.addEventListener('message',function(e){
document.getElementById('received-message').innerHTML = e.data
});
document.addEventListener('DOMContentLoaded',function(e){
document.getElementById('send-button').addEventListener('click',function(e){
sock.send(document.getElementById('message').value);
});
});
</script>
デモ
WebSocketで遊んでみよう!
(´・ω・`)のゲーム
shobon.herokuapp.com
自己紹介 (´・ω・`)のゲーム
● 詳細は GitHub で!
https://github.com/tomoeine/websocket-shobon-game
// シングルプロセスなので変数に入れておくだけでOK(ただし同時に来るとちゃんと計算できないかも)
let x = 0
let y = 0
wss.on('connection',function(ws){
ws.on('message',function(message){
// 文字列を見て座標の計算してるだけ
if (message === '右' && x < 220) {
x = x + 10
} else if (message === '左' && x > 0) {
x = x - 10
} // 略
// 計算した座標を全てのクライアントに送る
sendMessage()
});
});
ご清聴ありがとうございました!
澤井 友恵
@tomoeine
Node.js でサクッと
WebSocket

More Related Content

More from Tomoe Sawai

More from Tomoe Sawai (10)

田舎暮らし流エンジニアスキルアップ術
田舎暮らし流エンジニアスキルアップ術田舎暮らし流エンジニアスキルアップ術
田舎暮らし流エンジニアスキルアップ術
 
在宅フリーランスで 失敗した話3選
在宅フリーランスで 失敗した話3選在宅フリーランスで 失敗した話3選
在宅フリーランスで 失敗した話3選
 
Stripe Connect with Subscriptions で サブスクプラットフォーマー になろう
Stripe Connect with Subscriptions で サブスクプラットフォーマー になろうStripe Connect with Subscriptions で サブスクプラットフォーマー になろう
Stripe Connect with Subscriptions で サブスクプラットフォーマー になろう
 
Solidus + Stripe で爆速!?ECサイト構築
Solidus + Stripe で爆速!?ECサイト構築Solidus + Stripe で爆速!?ECサイト構築
Solidus + Stripe で爆速!?ECサイト構築
 
宮崎移住して山の中でリモートワークしてみた(2019/6/26)
宮崎移住して山の中でリモートワークしてみた(2019/6/26)宮崎移住して山の中でリモートワークしてみた(2019/6/26)
宮崎移住して山の中でリモートワークしてみた(2019/6/26)
 
宮崎の山の中でリモートワークしてみた
宮崎の山の中でリモートワークしてみた宮崎の山の中でリモートワークしてみた
宮崎の山の中でリモートワークしてみた
 
Firebase Authを Nuxt + Railsの自前サービス に導入してみた
Firebase Authを Nuxt + Railsの自前サービス に導入してみたFirebase Authを Nuxt + Railsの自前サービス に導入してみた
Firebase Authを Nuxt + Railsの自前サービス に導入してみた
 
センスゼロエンジニアが ノンデザイナーズ・デザインブック を読んでどこまでできるか試す
センスゼロエンジニアが ノンデザイナーズ・デザインブック を読んでどこまでできるか試すセンスゼロエンジニアが ノンデザイナーズ・デザインブック を読んでどこまでできるか試す
センスゼロエンジニアが ノンデザイナーズ・デザインブック を読んでどこまでできるか試す
 
5分で伝えるAWS
5分で伝えるAWS5分で伝えるAWS
5分で伝えるAWS
 
プラットフォームビジネスを手軽に始める!Stripe Connectを使ってみた
プラットフォームビジネスを手軽に始める!Stripe Connectを使ってみたプラットフォームビジネスを手軽に始める!Stripe Connectを使ってみた
プラットフォームビジネスを手軽に始める!Stripe Connectを使ってみた
 

Recently uploaded

研究紹介スライド: オフライン強化学習に基づくロボティックスワームの制御器の設計
研究紹介スライド: オフライン強化学習に基づくロボティックスワームの制御器の設計研究紹介スライド: オフライン強化学習に基づくロボティックスワームの制御器の設計
研究紹介スライド: オフライン強化学習に基づくロボティックスワームの制御器の設計
atsushi061452
 

Recently uploaded (12)

ロボットマニピュレーションの作業・動作計画 / rosjp_planning_for_robotic_manipulation_20240521
ロボットマニピュレーションの作業・動作計画 / rosjp_planning_for_robotic_manipulation_20240521ロボットマニピュレーションの作業・動作計画 / rosjp_planning_for_robotic_manipulation_20240521
ロボットマニピュレーションの作業・動作計画 / rosjp_planning_for_robotic_manipulation_20240521
 
LoRaWAN無位置ロープ式水漏れセンサーWL03A 日本語マニュアル
LoRaWAN無位置ロープ式水漏れセンサーWL03A 日本語マニュアルLoRaWAN無位置ロープ式水漏れセンサーWL03A 日本語マニュアル
LoRaWAN無位置ロープ式水漏れセンサーWL03A 日本語マニュアル
 
ネットワーク可視化 振る舞い検知(NDR)ご紹介_キンドリル202405.pdf
ネットワーク可視化 振る舞い検知(NDR)ご紹介_キンドリル202405.pdfネットワーク可視化 振る舞い検知(NDR)ご紹介_キンドリル202405.pdf
ネットワーク可視化 振る舞い検知(NDR)ご紹介_キンドリル202405.pdf
 
MPAなWebフレームワーク、Astroの紹介 (その1) 2024/05/17の勉強会で発表されたものです。
MPAなWebフレームワーク、Astroの紹介 (その1) 2024/05/17の勉強会で発表されたものです。MPAなWebフレームワーク、Astroの紹介 (その1) 2024/05/17の勉強会で発表されたものです。
MPAなWebフレームワーク、Astroの紹介 (その1) 2024/05/17の勉強会で発表されたものです。
 
Hyperledger Fabricコミュニティ活動体験& Hyperledger Fabric最新状況ご紹介
Hyperledger Fabricコミュニティ活動体験& Hyperledger Fabric最新状況ご紹介Hyperledger Fabricコミュニティ活動体験& Hyperledger Fabric最新状況ご紹介
Hyperledger Fabricコミュニティ活動体験& Hyperledger Fabric最新状況ご紹介
 
研究紹介スライド: オフライン強化学習に基づくロボティックスワームの制御器の設計
研究紹介スライド: オフライン強化学習に基づくロボティックスワームの制御器の設計研究紹介スライド: オフライン強化学習に基づくロボティックスワームの制御器の設計
研究紹介スライド: オフライン強化学習に基づくロボティックスワームの制御器の設計
 
情報を表現するときのポイント
情報を表現するときのポイント情報を表現するときのポイント
情報を表現するときのポイント
 
2024年5月17日 先駆的科学計算フォーラム2024 機械学習を用いた新たなゲーム体験の創出の応用
2024年5月17日 先駆的科学計算フォーラム2024 機械学習を用いた新たなゲーム体験の創出の応用2024年5月17日 先駆的科学計算フォーラム2024 機械学習を用いた新たなゲーム体験の創出の応用
2024年5月17日 先駆的科学計算フォーラム2024 機械学習を用いた新たなゲーム体験の創出の応用
 
部内勉強会(IT用語ざっくり学習) 実施日:2024年5月17日(金) 対象者:営業部社員
部内勉強会(IT用語ざっくり学習) 実施日:2024年5月17日(金) 対象者:営業部社員部内勉強会(IT用語ざっくり学習) 実施日:2024年5月17日(金) 対象者:営業部社員
部内勉強会(IT用語ざっくり学習) 実施日:2024年5月17日(金) 対象者:営業部社員
 
Keywordmap overview material/CINC.co.ltd
Keywordmap overview material/CINC.co.ltdKeywordmap overview material/CINC.co.ltd
Keywordmap overview material/CINC.co.ltd
 
LoRaWAN無位置ロープ型水漏れセンサー WL03A-LB/LSカタログ ファイル
LoRaWAN無位置ロープ型水漏れセンサー WL03A-LB/LSカタログ ファイルLoRaWAN無位置ロープ型水漏れセンサー WL03A-LB/LSカタログ ファイル
LoRaWAN無位置ロープ型水漏れセンサー WL03A-LB/LSカタログ ファイル
 
Intranet Development v1.0 (TSG LIVE! 12 LT )
Intranet Development v1.0 (TSG LIVE! 12 LT )Intranet Development v1.0 (TSG LIVE! 12 LT )
Intranet Development v1.0 (TSG LIVE! 12 LT )
 

Node.js でサクッと WebSocket