Submit Search
Upload
Non blocking and asynchronous
•
10 likes
•
2,611 views
N
Norio Kobota
Follow
for WebSocket Study
Read less
Read more
Technology
Report
Share
Report
Share
1 of 28
Recommended
Lt
Lt
LGA128
Node.js×mongo dbで3年間サービス運用してみた話
Node.js×mongo dbで3年間サービス運用してみた話
leverages_event
Nodeについて
Nodeについて
Natsuki Yamanaka
Node.jsでブラウザメッセンジャー
Node.jsでブラウザメッセンジャー
Yahoo!デベロッパーネットワーク
サーバサイドNodeの使い道
サーバサイドNodeの使い道
pospome
Node.js を選ぶとき 選ばないとき
Node.js を選ぶとき 選ばないとき
Ryunosuke SATO
TypeScriptへの入口
TypeScriptへの入口
Sunao Tomita
Getting start with knockout.js
Getting start with knockout.js
Akio Ishida
Recommended
Lt
Lt
LGA128
Node.js×mongo dbで3年間サービス運用してみた話
Node.js×mongo dbで3年間サービス運用してみた話
leverages_event
Nodeについて
Nodeについて
Natsuki Yamanaka
Node.jsでブラウザメッセンジャー
Node.jsでブラウザメッセンジャー
Yahoo!デベロッパーネットワーク
サーバサイドNodeの使い道
サーバサイドNodeの使い道
pospome
Node.js を選ぶとき 選ばないとき
Node.js を選ぶとき 選ばないとき
Ryunosuke SATO
TypeScriptへの入口
TypeScriptへの入口
Sunao Tomita
Getting start with knockout.js
Getting start with knockout.js
Akio Ishida
づや会 Vol4 Node.jsとphpのパフォーマンスを比較してみる
づや会 Vol4 Node.jsとphpのパフォーマンスを比較してみる
zuya
jTthree V3 technical preview
jTthree V3 technical preview
Masaki Yamamoto
Node.jsでサーバプログラマ デビューしよう
Node.jsでサーバプログラマ デビューしよう
Yuusuke Takeuchi
Web Workerで○○する話
Web Workerで○○する話
ushiboy
SignalRブートキャンプ
SignalRブートキャンプ
Kouji Matsui
Nodeとフロントエンド − 知っておかなければならない、今と未来の話 −
Nodeとフロントエンド − 知っておかなければならない、今と未来の話 −
Kohei Asai
【東京Node学園祭2016】Node.js × Babel で AWS Lambda アプリケーションを開発する
【東京Node学園祭2016】Node.js × Babel で AWS Lambda アプリケーションを開発する
Hiroyuki Kusu
Case study to use MongoDB in middle-class SIer / (中規模) SIerだってMongoDBできたよ!
Case study to use MongoDB in middle-class SIer / (中規模) SIerだってMongoDBできたよ!
Naruhiko Ogasawara
JavaのテストGroovyでいいのではないかという話
JavaのテストGroovyでいいのではないかという話
disc99_
JJUG CCC 2013 Fall「JVMコードリーディング入門-JVMのOS抽象化レイヤーについて-」
JJUG CCC 2013 Fall「JVMコードリーディング入門-JVMのOS抽象化レイヤーについて-」
y torazuka
JS開発環境を晒す。
JS開発環境を晒す。
Eiji Kuroda
Azureでのプレゼン
Azureでのプレゼン
Fukuda Takuro
サバフェスLt
サバフェスLt
宗 大栗
Db tech showcase2015 how to replicate between clusters
Db tech showcase2015 how to replicate between clusters
Hiroaki Kubota
Nodeにしましょう
Nodeにしましょう
Yuzo Hebishima
Dockerイメージで誰でも気軽にMroonga体験
Dockerイメージで誰でも気軽にMroonga体験
yoku0825
Javascriptのあれやこれやをまとめて説明してみる
Javascriptのあれやこれやをまとめて説明してみる
Shunji Konishi
Memcache Queue
Memcache Queue
Masaru Hoshino
2012.02.28 IAMAS GeekLab #037 MyScripts
2012.02.28 IAMAS GeekLab #037 MyScripts
玉津圭太 玉津圭太
SDK for NFC Starter Kit(2) 使ってみる
SDK for NFC Starter Kit(2) 使ってみる
Hirokuma Ueno
Reactつかってみた
Reactつかってみた
Minori Tokuda
Osoljp201204
Osoljp201204
Masataka Tsukamoto
More Related Content
What's hot
づや会 Vol4 Node.jsとphpのパフォーマンスを比較してみる
づや会 Vol4 Node.jsとphpのパフォーマンスを比較してみる
zuya
jTthree V3 technical preview
jTthree V3 technical preview
Masaki Yamamoto
Node.jsでサーバプログラマ デビューしよう
Node.jsでサーバプログラマ デビューしよう
Yuusuke Takeuchi
Web Workerで○○する話
Web Workerで○○する話
ushiboy
SignalRブートキャンプ
SignalRブートキャンプ
Kouji Matsui
Nodeとフロントエンド − 知っておかなければならない、今と未来の話 −
Nodeとフロントエンド − 知っておかなければならない、今と未来の話 −
Kohei Asai
【東京Node学園祭2016】Node.js × Babel で AWS Lambda アプリケーションを開発する
【東京Node学園祭2016】Node.js × Babel で AWS Lambda アプリケーションを開発する
Hiroyuki Kusu
Case study to use MongoDB in middle-class SIer / (中規模) SIerだってMongoDBできたよ!
Case study to use MongoDB in middle-class SIer / (中規模) SIerだってMongoDBできたよ!
Naruhiko Ogasawara
JavaのテストGroovyでいいのではないかという話
JavaのテストGroovyでいいのではないかという話
disc99_
JJUG CCC 2013 Fall「JVMコードリーディング入門-JVMのOS抽象化レイヤーについて-」
JJUG CCC 2013 Fall「JVMコードリーディング入門-JVMのOS抽象化レイヤーについて-」
y torazuka
JS開発環境を晒す。
JS開発環境を晒す。
Eiji Kuroda
Azureでのプレゼン
Azureでのプレゼン
Fukuda Takuro
サバフェスLt
サバフェスLt
宗 大栗
Db tech showcase2015 how to replicate between clusters
Db tech showcase2015 how to replicate between clusters
Hiroaki Kubota
Nodeにしましょう
Nodeにしましょう
Yuzo Hebishima
Dockerイメージで誰でも気軽にMroonga体験
Dockerイメージで誰でも気軽にMroonga体験
yoku0825
Javascriptのあれやこれやをまとめて説明してみる
Javascriptのあれやこれやをまとめて説明してみる
Shunji Konishi
Memcache Queue
Memcache Queue
Masaru Hoshino
2012.02.28 IAMAS GeekLab #037 MyScripts
2012.02.28 IAMAS GeekLab #037 MyScripts
玉津圭太 玉津圭太
SDK for NFC Starter Kit(2) 使ってみる
SDK for NFC Starter Kit(2) 使ってみる
Hirokuma Ueno
What's hot
(20)
づや会 Vol4 Node.jsとphpのパフォーマンスを比較してみる
づや会 Vol4 Node.jsとphpのパフォーマンスを比較してみる
jTthree V3 technical preview
jTthree V3 technical preview
Node.jsでサーバプログラマ デビューしよう
Node.jsでサーバプログラマ デビューしよう
Web Workerで○○する話
Web Workerで○○する話
SignalRブートキャンプ
SignalRブートキャンプ
Nodeとフロントエンド − 知っておかなければならない、今と未来の話 −
Nodeとフロントエンド − 知っておかなければならない、今と未来の話 −
【東京Node学園祭2016】Node.js × Babel で AWS Lambda アプリケーションを開発する
【東京Node学園祭2016】Node.js × Babel で AWS Lambda アプリケーションを開発する
Case study to use MongoDB in middle-class SIer / (中規模) SIerだってMongoDBできたよ!
Case study to use MongoDB in middle-class SIer / (中規模) SIerだってMongoDBできたよ!
JavaのテストGroovyでいいのではないかという話
JavaのテストGroovyでいいのではないかという話
JJUG CCC 2013 Fall「JVMコードリーディング入門-JVMのOS抽象化レイヤーについて-」
JJUG CCC 2013 Fall「JVMコードリーディング入門-JVMのOS抽象化レイヤーについて-」
JS開発環境を晒す。
JS開発環境を晒す。
Azureでのプレゼン
Azureでのプレゼン
サバフェスLt
サバフェスLt
Db tech showcase2015 how to replicate between clusters
Db tech showcase2015 how to replicate between clusters
Nodeにしましょう
Nodeにしましょう
Dockerイメージで誰でも気軽にMroonga体験
Dockerイメージで誰でも気軽にMroonga体験
Javascriptのあれやこれやをまとめて説明してみる
Javascriptのあれやこれやをまとめて説明してみる
Memcache Queue
Memcache Queue
2012.02.28 IAMAS GeekLab #037 MyScripts
2012.02.28 IAMAS GeekLab #037 MyScripts
SDK for NFC Starter Kit(2) 使ってみる
SDK for NFC Starter Kit(2) 使ってみる
Similar to Non blocking and asynchronous
Reactつかってみた
Reactつかってみた
Minori Tokuda
Osoljp201204
Osoljp201204
Masataka Tsukamoto
VyOS Users Meeting Japan #4 VyOS 1.2.0の開発の様子と自動テストの話
VyOS Users Meeting Japan #4 VyOS 1.2.0の開発の様子と自動テストの話
雄也 日下部
worker_threadsを使った実装の勘所
worker_threadsを使った実装の勘所
yo_waka
初心者がOpenIndianaで自宅サーバを作ったよって話
初心者がOpenIndianaで自宅サーバを作ったよって話
Masataka Tsukamoto
コルーチンの実装について
コルーチンの実装について
Taku Miyakawa
2010/11/16 WebプログラマのためのScala入門勉強会@渋谷
2010/11/16 WebプログラマのためのScala入門勉強会@渋谷
wpscala
20090124shibuya Trac
20090124shibuya Trac
Kazuya Hirobe
入門書を読み終わったらなにしよう? 〜Python と WebAPI の使い方から学ぶ次の一歩〜 / next-step-python-programing
入門書を読み終わったらなにしよう? 〜Python と WebAPI の使い方から学ぶ次の一歩〜 / next-step-python-programing
Kei IWASAKI
東京Node学園 今できる通信高速化にトライしてみた
東京Node学園 今できる通信高速化にトライしてみた
Yoshiki Shibukawa
14対話bot発表資料
14対話bot発表資料
Keiichirou Miyamoto
Bp study39 nodejs
Bp study39 nodejs
Yohei Sasaki
Walking front end
Walking front end
Hirata Tomoko
じっくりコトコト煮込んだJavaスープ
じっくりコトコト煮込んだJavaスープ
Kazuhiro Serizawa
BIOSからUEFI
BIOSからUEFI
Yasuaki Sera
CONBU API の開発
CONBU API の開発
TAKANO Mitsuhiro
Iotlt 28 HoloLensに日本語聞いてもらいたい
Iotlt 28 HoloLensに日本語聞いてもらいたい
Masaki Yamamoto
RubyConfの話の続きのおはなし
RubyConfの話の続きのおはなし
yamanekko
20170527 inside .NET Core on Linux
20170527 inside .NET Core on Linux
Takayoshi Tanaka
「はじめてのClojure」出版記念!Light Tableを使ってClojureに触れてみよう!【第2回】
「はじめてのClojure」出版記念!Light Tableを使ってClojureに触れてみよう!【第2回】
schoowebcampus
Similar to Non blocking and asynchronous
(20)
Reactつかってみた
Reactつかってみた
Osoljp201204
Osoljp201204
VyOS Users Meeting Japan #4 VyOS 1.2.0の開発の様子と自動テストの話
VyOS Users Meeting Japan #4 VyOS 1.2.0の開発の様子と自動テストの話
worker_threadsを使った実装の勘所
worker_threadsを使った実装の勘所
初心者がOpenIndianaで自宅サーバを作ったよって話
初心者がOpenIndianaで自宅サーバを作ったよって話
コルーチンの実装について
コルーチンの実装について
2010/11/16 WebプログラマのためのScala入門勉強会@渋谷
2010/11/16 WebプログラマのためのScala入門勉強会@渋谷
20090124shibuya Trac
20090124shibuya Trac
入門書を読み終わったらなにしよう? 〜Python と WebAPI の使い方から学ぶ次の一歩〜 / next-step-python-programing
入門書を読み終わったらなにしよう? 〜Python と WebAPI の使い方から学ぶ次の一歩〜 / next-step-python-programing
東京Node学園 今できる通信高速化にトライしてみた
東京Node学園 今できる通信高速化にトライしてみた
14対話bot発表資料
14対話bot発表資料
Bp study39 nodejs
Bp study39 nodejs
Walking front end
Walking front end
じっくりコトコト煮込んだJavaスープ
じっくりコトコト煮込んだJavaスープ
BIOSからUEFI
BIOSからUEFI
CONBU API の開発
CONBU API の開発
Iotlt 28 HoloLensに日本語聞いてもらいたい
Iotlt 28 HoloLensに日本語聞いてもらいたい
RubyConfの話の続きのおはなし
RubyConfの話の続きのおはなし
20170527 inside .NET Core on Linux
20170527 inside .NET Core on Linux
「はじめてのClojure」出版記念!Light Tableを使ってClojureに触れてみよう!【第2回】
「はじめてのClojure」出版記念!Light Tableを使ってClojureに触れてみよう!【第2回】
Recently uploaded
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
Yuki Kikuchi
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
FumieNakayama
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
FumieNakayama
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
博三 太田
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版) 2024年4月作成
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版) 2024年4月作成
Hiroshi Tomioka
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
akihisamiyanaga1
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
sugiuralab
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
UEHARA, Tetsutaro
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
Hiroki Ichikura
Recently uploaded
(9)
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版) 2024年4月作成
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版) 2024年4月作成
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
Non blocking and asynchronous
1.
NonBlocking and Asynchronous
Norio Kobota @nori0428
2.
自己紹介 小保田 規生(こぼた
のりお)と申します幼少のころから、こくぼくん、くぼたくんと呼ばれるのがデフォルトになってます Lighttpd用のwebsocket module作ってます# 最近リファクタリング、メンテや更新出来てなくてごめんなさい https://github.com/nori0428/mod_websocket 本業は組み込みや、ネットワーク周りのソフトウェアエンジニアですが、最近はJavaScriptも書いてます
3.
はじめに WebSocket JavaScriptのLayerからみると、一般的なイベント駆動型のTCPsocketを扱えるようになる仕組み※1
詳細は他の講師の方が説明してくださっているとおり:) WebSocketの利用方法やアプリケーションは良く説明されている。一方、サーバ側の動きはあまり説明されることが無い? ※1:現時点では無理です
4.
と、思って調べてたら・・・
5.
既に素晴らしい資料がありました! Node.js 入門
http://d.hatena.ne.jp/forest1040/
6.
Node.js入門 素晴らしく纏まっている・・・これは勝てない 発見したのが資料事前UP前日
急病を理由に逃げようか、本気で考える ・・・参照させてもらおう、と開き直って本日に至る
7.
forest1040さんの素晴らしい資料公開に大感謝 forest1040さん、オープンソースカンファレンス2011 Kansai/Kobeに参加された皆さま、ごめんなさい
ごめんなさい・・・otz
8.
言葉の定義
9.
並行処理 マルチスレッドによる並行処理 呼び出し元と並行して処理が行われる
シングルスレッドによる並行処理 呼び出し元がプロセッサを利用していないときに処理が行われる 処理2開始! 処理1 処理2 処理2開始! 処理1 処理2 Node.js 入門 page.7
10.
同期呼び出し、非同期呼び出し 同期呼び出し(Synchronous Call)
メソッドを呼び出すとメソッド内処理が完了するまで呼び出し元に戻ってこない 非同期呼び出し(Asynchronous Call) メソッドを呼び出した瞬間に呼び出し元に処理が戻ってくる 呼びだした処理は先の並行処理モデルによって処理されるタイミングが異なる Node.js 入門 page.10
11.
ブロッキングI/O、ノンブロッキングI/O ブロッキングI/O データ読み込み、書き込みなどの処理が完了するまで待たされること
ノンブロッキングI/O データ読み込み、書き込みなどの処理が完了するのを待たず、次の処理が行えること Node.js 入門 page.11
12.
I/O Model 非常によく引用される図
Boost application performance using asynchronous I/O
13.
非同期呼び出しやノンブロッキングI/Oが必要なのは何故か?
14.
C10K problem サーバ1台に対して、クライアントが1万台繋がったらどうなる?と言う問題
The C10Kproblem 解決方法(The C10K problemの中で記述されています) 各スレッドが複数のクライアントを受け付けるノンブロッキングI/Oとレベルトリガ型通知※1を利用する 各スレッドが複数のクライアントを受け付けるノンブロッキングI/Oとエッジトリガ型通知※1を利用する 各スレッドが複数のクライアントを受け付けるAIOを利用する 各スレッドが1つのクライアントを受け付けるブロッキングI/Oを利用する サーバコードをカーネルに組み込む ※1:http://d.hatena.ne.jp/kazuhooku/20080707/1215385159 Node.js 入門 page.15
15.
WebSocket Server実装 Apache
- pywebsocket 解決方法4番各スレッドが1つのクライアントを受け付けるブロッキングI/Oを利用する Node.js他、殆どのWebSocketServer実装 解決方法3番各スレッドが複数のクライアントを受け付けるAIO(相当するlibev + libeioなど)を利用する
16.
アプリケーションが気をつけることは?
17.
注意することは、1つだけ 1つのスレッドが、複数のクライアントを処理->イベントハンドラ内はシングルスレッド libev
etc. clientA Application clientB Event callback ここはシングルスレッド で逐次処理 この間、clientBは待たされる Event callback イベントハンドラ内の処理は、出来る限りシンプルに、短時間で終わらせましょう
18.
今後の展望
19.
ボトルネックはネットワーク?シングルスレッド? リアルタイム性を追求したい、マルチコア時代の高並列性I/Oアーキテクチャ –
Wavy http://d.hatena.ne.jp/viver/20090131/p1 並列イベント駆動I/Oフレームワーク – mpio http://d.hatena.ne.jp/viver/20100412/p1 clientA AIO Application clientB イベントハンドラもマルチスレッド化
20.
WebSocketApplicationをスケールさせるには? WebSocketはCross Domain通信が可能WebSocketを用いたApplicationには別のサーバを!
httpd browser browser websocketd browser Cross Domain HTTPはWebServerへ WebSocketは別Serverへ websocketd
21.
スケールのさせ方(将来?) WebSocket ProxyWebSocketのセッション管理、バックエンドのサーバ負荷分散を行う為のproxyが必要になる
browser browser websocketd browser WebSocket Proxy ProxyServerで別Serverへ 振り分け httpd websocketd proxy
22.
mod_websocket for lighttpdのご紹介
23.
mod_websocket for lighttpd
WebSocket Proxyでは無い WebSocket とTCP Socketを繋ぐReverse Proxyぽい実装 lighttpd Application browsers WebSocket Internet TCP Socket TCP Socket WebSocket
24.
Pros, Cons Pros
外部に公開するポートはLighttpdで利用するポートだけ サーバサイドアプリケーションを作成すること無く、既存TCPサーバと通信が可能 Cons サーバサイドアプリケーションが作りづらい version-07には対応してません mod_websocketの出来が悪い・・・いや、ほんとにごめんなさい
25.
地味なデモ(for chrome, safari,
firefox 4.x) https://onmessage.ws/demos/ws-smtp.html JavaScript lighttpd postfix Browsers WebSocket(wss scheme) new WebSocket connect TCP Socket send SMTPTerminal onmessage disconnect onclose
26.
JavaScriptと、lighttpdのconfig fileだけで実現 デモの特徴
websocket.server = (“/smtp” => ( “host” => “127.0.0.1”, “port” => 25, “origins” => (“onmessage.ws”)) browser Any Client lighttpd.conf mod_websocket for Lighttpd Local Area※1 Internet lighttpd postfix ※1: デモではローカルループバックです
27.
まとめ ノンブロッキング、非同期について覚えておこう イベントハンドラ内処理は短時間で済ませよう
WebSocketサーバはもっとリアルタイム性を追求できる WebSocketサーバのスケールのさせ方も変わるはず mod_websocket for lighttpdは頑張って開発します
28.
Thank You! 資料作成にあたり大変なご協力をいただいた@nmiyo氏に感謝