Submit Search
Upload
Tiny server
•
Download as PPTX, PDF
•
0 likes
•
57 views
komem3
Follow
go 言語で作成した最小構成の web サーバー 会社の LT より
Read less
Read more
Engineering
Report
Share
Report
Share
1 of 15
Download now
Recommended
Sendslacker
Sendslacker
RyogaHorikoshi
Varnish
Varnish
Ayako Hatori
Simplest API Server "miq"
Simplest API Server "miq"
Yuki Ito
UnicastWS vol.1
UnicastWS vol.1
Unicast Inc.
Real timeweb
Real timeweb
Shuhei Katori
Bossan dentoo
Bossan dentoo
kubo39
Non-blocking “Scalable” Network Programming with “aleph (by Z.Tellman)”
Non-blocking “Scalable” Network Programming with “aleph (by Z.Tellman)”
Shinnosuke Asahara
Nodejsによるwebsocket入門
Nodejsによるwebsocket入門
Daiki Hayakawa
Recommended
Sendslacker
Sendslacker
RyogaHorikoshi
Varnish
Varnish
Ayako Hatori
Simplest API Server "miq"
Simplest API Server "miq"
Yuki Ito
UnicastWS vol.1
UnicastWS vol.1
Unicast Inc.
Real timeweb
Real timeweb
Shuhei Katori
Bossan dentoo
Bossan dentoo
kubo39
Non-blocking “Scalable” Network Programming with “aleph (by Z.Tellman)”
Non-blocking “Scalable” Network Programming with “aleph (by Z.Tellman)”
Shinnosuke Asahara
Nodejsによるwebsocket入門
Nodejsによるwebsocket入門
Daiki Hayakawa
MmapScanner
MmapScanner
Masahiro Tomita
Command パターン
Command パターン
Akio Nikaido
Transaction scopeまだダメ
Transaction scopeまだダメ
Oda Shinsuke
エコなWebサーバー
エコなWebサーバー
emasaka
#mailerstudy 01 LT POP/IMAP入門
#mailerstudy 01 LT POP/IMAP入門
Takashi Takizawa
apachehereというPHPのBuiltin Serverっぽいやつをつくった
apachehereというPHPのBuiltin Serverっぽいやつをつくった
Junichi Ishida
ど素人向けエンジニア勉強会(第2回)
ど素人向けエンジニア勉強会(第2回)
YukiIwasaki2764
Alt#0x008 2017/5/20
Alt#0x008 2017/5/20
Koki Natsume
Rubyでバルクインサート
Rubyでバルクインサート
Fujimura Munehiko
JSONでメール送信 | HTTP API Server ``Haineko''/YAPC::Asia Tokyo 2013 LT Day2
JSONでメール送信 | HTTP API Server ``Haineko''/YAPC::Asia Tokyo 2013 LT Day2
azumakuniyuki 🐈
私たちは何を Web っぽいと感じているのか
私たちは何を Web っぽいと感じているのか
Kenta Yamamoto
GGEasyMonitor技術情報
GGEasyMonitor技術情報
KitASP_Corporation
RPCノード構築方法【Litecoin】
RPCノード構築方法【Litecoin】
qaz_id
モダン JavaScript における非同期処理 - Promise, async/await -
モダン JavaScript における非同期処理 - Promise, async/await -
Kazunori Hashikuchi
RubyGems と Bundler について
RubyGems と Bundler について
Tomoya Kawanishi
RubyGems と Bundler について
RubyGems と Bundler について
Tomoya Kawanishi
20120525 mt websocket
20120525 mt websocket
Ryosuke MATSUMOTO
Janogia20120921 yoshinotakeshi
Janogia20120921 yoshinotakeshi
Keisuke Ishibashi
CategoLJについて
CategoLJについて
Toshiaki Maki
Rustのタスクモデルについて
Rustのタスクモデルについて
zigen
ゆるかわPhp
ゆるかわPhp
Ryota Mochizuki
Em synchrony について
Em synchrony について
Tomoya Kawanishi
More Related Content
What's hot
MmapScanner
MmapScanner
Masahiro Tomita
Command パターン
Command パターン
Akio Nikaido
Transaction scopeまだダメ
Transaction scopeまだダメ
Oda Shinsuke
エコなWebサーバー
エコなWebサーバー
emasaka
#mailerstudy 01 LT POP/IMAP入門
#mailerstudy 01 LT POP/IMAP入門
Takashi Takizawa
apachehereというPHPのBuiltin Serverっぽいやつをつくった
apachehereというPHPのBuiltin Serverっぽいやつをつくった
Junichi Ishida
ど素人向けエンジニア勉強会(第2回)
ど素人向けエンジニア勉強会(第2回)
YukiIwasaki2764
Alt#0x008 2017/5/20
Alt#0x008 2017/5/20
Koki Natsume
Rubyでバルクインサート
Rubyでバルクインサート
Fujimura Munehiko
JSONでメール送信 | HTTP API Server ``Haineko''/YAPC::Asia Tokyo 2013 LT Day2
JSONでメール送信 | HTTP API Server ``Haineko''/YAPC::Asia Tokyo 2013 LT Day2
azumakuniyuki 🐈
私たちは何を Web っぽいと感じているのか
私たちは何を Web っぽいと感じているのか
Kenta Yamamoto
GGEasyMonitor技術情報
GGEasyMonitor技術情報
KitASP_Corporation
RPCノード構築方法【Litecoin】
RPCノード構築方法【Litecoin】
qaz_id
モダン JavaScript における非同期処理 - Promise, async/await -
モダン JavaScript における非同期処理 - Promise, async/await -
Kazunori Hashikuchi
RubyGems と Bundler について
RubyGems と Bundler について
Tomoya Kawanishi
RubyGems と Bundler について
RubyGems と Bundler について
Tomoya Kawanishi
20120525 mt websocket
20120525 mt websocket
Ryosuke MATSUMOTO
Janogia20120921 yoshinotakeshi
Janogia20120921 yoshinotakeshi
Keisuke Ishibashi
CategoLJについて
CategoLJについて
Toshiaki Maki
Rustのタスクモデルについて
Rustのタスクモデルについて
zigen
What's hot
(20)
MmapScanner
MmapScanner
Command パターン
Command パターン
Transaction scopeまだダメ
Transaction scopeまだダメ
エコなWebサーバー
エコなWebサーバー
#mailerstudy 01 LT POP/IMAP入門
#mailerstudy 01 LT POP/IMAP入門
apachehereというPHPのBuiltin Serverっぽいやつをつくった
apachehereというPHPのBuiltin Serverっぽいやつをつくった
ど素人向けエンジニア勉強会(第2回)
ど素人向けエンジニア勉強会(第2回)
Alt#0x008 2017/5/20
Alt#0x008 2017/5/20
Rubyでバルクインサート
Rubyでバルクインサート
JSONでメール送信 | HTTP API Server ``Haineko''/YAPC::Asia Tokyo 2013 LT Day2
JSONでメール送信 | HTTP API Server ``Haineko''/YAPC::Asia Tokyo 2013 LT Day2
私たちは何を Web っぽいと感じているのか
私たちは何を Web っぽいと感じているのか
GGEasyMonitor技術情報
GGEasyMonitor技術情報
RPCノード構築方法【Litecoin】
RPCノード構築方法【Litecoin】
モダン JavaScript における非同期処理 - Promise, async/await -
モダン JavaScript における非同期処理 - Promise, async/await -
RubyGems と Bundler について
RubyGems と Bundler について
RubyGems と Bundler について
RubyGems と Bundler について
20120525 mt websocket
20120525 mt websocket
Janogia20120921 yoshinotakeshi
Janogia20120921 yoshinotakeshi
CategoLJについて
CategoLJについて
Rustのタスクモデルについて
Rustのタスクモデルについて
Similar to Tiny server
ゆるかわPhp
ゆるかわPhp
Ryota Mochizuki
Em synchrony について
Em synchrony について
Tomoya Kawanishi
サーバーを作ろう (毎週のハンズオン勉強会の資料)
サーバーを作ろう (毎週のハンズオン勉強会の資料)
ひとし あまの
HttpとTelnetをつなぐ何か
HttpとTelnetをつなぐ何か
ShigekiYamada
[Basic 6] DNS / ソケット通信 / その他
[Basic 6] DNS / ソケット通信 / その他
Yuto Takei
Html5, Web Applications 2
Html5, Web Applications 2
totty jp
10th jan 2013_miyazaki
10th jan 2013_miyazaki
Kensaku Komatsu
これから利用拡大?WebSocket
これから利用拡大?WebSocket
AdvancedTechNight
Rancher2.0のコンテナ間通信を可視化してみた
Rancher2.0のコンテナ間通信を可視化してみた
cloretsblack
CometPub20070223
CometPub20070223
Hiroshi Ono
WebSocket Protocol と Plack::Middleware::WebSocket
WebSocket Protocol と Plack::Middleware::WebSocket
Yu Nobuoka
大規模ソーシャルゲーム開発から学んだPHP&MySQL実践テクニック
大規模ソーシャルゲーム開発から学んだPHP&MySQL実践テクニック
infinite_loop
AKS (k8s) Hands on Lab Contents
AKS (k8s) Hands on Lab Contents
Yoshio Terada
JavaScriptでSQLを唱えたいだけの人生だった
JavaScriptでSQLを唱えたいだけの人生だった
iPride Co., Ltd.
非エンジニアでもわかる
非エンジニアでもわかる
ssuser33820e
Webサーバの基礎知識【編集済み】
Webサーバの基礎知識【編集済み】
Kikunaga Taishi
18166746-NeverBlock-RubyKaigi2009
18166746-NeverBlock-RubyKaigi2009
Muhammad Ali
Webアプリ開発向け ゆるふわDocker使いが Cloud Naive開発に必要なetc.
Webアプリ開発向け ゆるふわDocker使いが Cloud Naive開発に必要なetc.
YASUKAZU NAGATOMI
Chromebook 「だけ」で WebRTCを動かそう
Chromebook 「だけ」で WebRTCを動かそう
mganeko
勉強会資料①
勉強会資料①
真亮 坂口
Similar to Tiny server
(20)
ゆるかわPhp
ゆるかわPhp
Em synchrony について
Em synchrony について
サーバーを作ろう (毎週のハンズオン勉強会の資料)
サーバーを作ろう (毎週のハンズオン勉強会の資料)
HttpとTelnetをつなぐ何か
HttpとTelnetをつなぐ何か
[Basic 6] DNS / ソケット通信 / その他
[Basic 6] DNS / ソケット通信 / その他
Html5, Web Applications 2
Html5, Web Applications 2
10th jan 2013_miyazaki
10th jan 2013_miyazaki
これから利用拡大?WebSocket
これから利用拡大?WebSocket
Rancher2.0のコンテナ間通信を可視化してみた
Rancher2.0のコンテナ間通信を可視化してみた
CometPub20070223
CometPub20070223
WebSocket Protocol と Plack::Middleware::WebSocket
WebSocket Protocol と Plack::Middleware::WebSocket
大規模ソーシャルゲーム開発から学んだPHP&MySQL実践テクニック
大規模ソーシャルゲーム開発から学んだPHP&MySQL実践テクニック
AKS (k8s) Hands on Lab Contents
AKS (k8s) Hands on Lab Contents
JavaScriptでSQLを唱えたいだけの人生だった
JavaScriptでSQLを唱えたいだけの人生だった
非エンジニアでもわかる
非エンジニアでもわかる
Webサーバの基礎知識【編集済み】
Webサーバの基礎知識【編集済み】
18166746-NeverBlock-RubyKaigi2009
18166746-NeverBlock-RubyKaigi2009
Webアプリ開発向け ゆるふわDocker使いが Cloud Naive開発に必要なetc.
Webアプリ開発向け ゆるふわDocker使いが Cloud Naive開発に必要なetc.
Chromebook 「だけ」で WebRTCを動かそう
Chromebook 「だけ」で WebRTCを動かそう
勉強会資料①
勉強会資料①
Tiny server
1.
Tiny Server komem3 1
2.
Web サーバーを自力で作ろう この本を参考に web
サーバーを作って行きます この本では C 言語で書かれていますが、説明が大変なので Go で実装していきます 2
3.
Web サーバーの流れ 1. リクエストを待つ 2.
入ってきたリクエストの中身を確認 3. 中身に合わせてレスポンスを書き込み 4. コネクションを閉じる 簡単に書くとこのような流れをしています 簡単に書けるので実装も簡単そう? 3
4.
リクエストを待つ ポートとプロトコルを指定してリクエストを待てる便利な関数を使う(net) ループと並行処理でコネクションに対して 処理していくことが分かる 4 ln, err :=
net.Listen("tcp", ":8080") if err != nil { // handle error } for { conn, err := ln.Accept() if err != nil { // handle error } go handleConnection(conn) } https://golang.org/pkg/net
5.
適当にコネクションに書き込む telnet だとメッセージが見れるがブラウザだと見れない 5 func handleConnection(con
net.Conn) { message := "hello World¥n" _, _ = con.Write([]byte(message)) con.Close() }
6.
見れない理由 http プロトコルに準拠していない 6 https://developer.mozilla.org/ja/docs/Web/HTTP/Overview#HTTP_flow リクエストで必要なもの ・httpメソッド ・リソースパス ・プロトコルのバージョン ・任意のヘッダー ・任意のボディ(POSTなど) レスポンスで必要なもの ・準拠するプロトコルのバージョン ・ステータスコード ・ステータスメッセージ ・任意のヘッダー ・任意のリソースを含む本文
7.
http プロトコルに合わせる(response) 最小限 http
プロトコルに準拠してみる コネクションに以下の情報を書き込む 7 Http/1.1 200 OK Hello World func handlerConnection(con net.Conn) { defer con.Close() writeString := fmt.Sprintf("Http/1.1 200 OK¥r¥n") writeString += fmt.Sprintf("¥r¥nHello World¥r¥n") con.Write([]byte(writeString)) } 見れた!!
8.
http プロトコルに合わせる(request) request はもう少し真面目に合わせてみる 8 GET
/ HTTP/1.1 Host: localhost:8080 { ... } type Request struct { Method string Path string Version string Headers map[string]string Body string } よしなに構造体に パース
9.
ソースコード(request parse) 9
10.
response を構造体として定義 request のついでに
response の書き込みも実装 10 Http/1.1 200 OK Server: tiny server Hello World type Response struct { Version string StatusCode int StatusMessage string Headers map[string]string Body string } よしなに 書き込み
11.
ソースコード(response parse) 11
12.
リクエストとレスポンスを関数に渡す 何か見たことある形に... 12 r := parseRequest(con) w
:= Response{ Version: "Http/1.1", Headers: map[string]string{}, } ServeHTTP(&w, &r) parseResponse(con, w)
13.
ルーティング 時間が無いので... 一応選択肢としては ● 配列ループ(正気じゃない) ● map ●
基数木(殆どがこれ。説明するにはもう LT 必要) 13
14.
まとめ ● Web サーバの流れ見て簡単そうな流れと思ったが簡単だった ●
これのおかげで http パッケージが読みやすくなるかも? ● ルーティング実装の基数木は他の人に LT 任せたいです ● 今回のアプローチは簡単なものなので実装を読み直した方がいいです 14
15.
ソースコード 下記リンクで今回の実装は見れます。中身変わっているかも… https://github.com/komem3/tiny_server 15
Download now