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

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

Utilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native IntegrationsUtilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native IntegrationsWSO2
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイスCRI Japan, Inc.
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。iPride Co., Ltd.
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルCRI Japan, Inc.
 
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...Toru Tamaki
 
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Gamesatsushi061452
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。iPride Co., Ltd.
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。iPride Co., Ltd.
 
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video UnderstandingToru Tamaki
 
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptxsn679259
 

Recently uploaded (10)

Utilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native IntegrationsUtilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native Integrations
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
 
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
 
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
 

Node.js でサクッと WebSocket