狠狠撸

狠狠撸Share a Scribd company logo
サーバー実装いろいろ その1 反復サーバー (iterative server) 並行サーバー (concurrent server)  ? Fork server  ? PreFork server
クライアント サーバー リクエスト レスポンス
粒度を細かくすると下記のように (HTTP サーバとブラウザを想定。つまり TCP) クライアント サーバー SYN SYN, ack ack データ(要求) データ(応答) ,  要求の ack 応答の ack FIN ack FIN ack socket,bind,listen accept( ブロック ) accept から戻る read( ブロック ) connect write read( ブロック ) read から戻る サーバが要求を処理 write read( ブロック ) read から戻る close close
?
反復サーバ (iterative server) use strict; use warnings; use IO::Socket; my $socket = IO::Socket::INET->new( Listen  => 20, LocalPort => 12345 ) or die; while ( my $con = $socket->accept ) { my $line = <$con>; print $con $line; close $con; } サーバー リクエスト 確立待ちコネクションキュー 確立済みコネクションキュー Listen キュー 3way hand shake  完了後 accept 問題点: リクエストの read でブロックするので複数接続あった場合、 最初の接続がリクエストをもたつくと後の接続が待たされる ことになる
Fork サーバ (concurrent server) use strict; use warnings; use IO::Socket; my $socket = IO::Socket::INET->new( Listen  => 20, LocalPort => 12345 ) or die; while ( my $con = $socket->accept ) { my $pid = fork; if ( $pid == 0 ) {  ## child  close $socket; my $line = <$con>; print $con $line; exit(0); }  else { ## parent  close $con; } } サーバー リクエスト 問題点: accept の度に fork するコスト accept サーバー accept fork サーバー サーバー サーバー サーバー 親 子
余談: pipe(READ, WRITE) 関数 IPC 通信の基礎。親プロセス子プロセスの間で 対話できるようになる。 fork しないとできないわけではなく、より身近な例としてまさしく パイプコマンドがある。「 ls | wc  」 fork READ WRITE 親 親 子 子 READ WRITE READ WRITE READ WRITE READ WRITE READ WRITE
PreFork サーバ (concurrent server) use strict; use warnings; use IO::Socket; use POSIX 'WNOHANG'; my $socket = IO::Socket::INET->new( Listen  => 20, LocalPort => 12345 ) or die; for ( 1 .. 5 ) { my $pid = fork; if ( $pid == 0 ) { ## child  while ( my $con = $socket->accept ) { close $socket; my $line = <$con>; print $con $line; close $con; } exit(0); } } ## parent;  $SIG{CHLD} = sub { while ( waitpid( -1, WNOHANG ) > 0 ) { } }; while (1) { ##  子プロセスの数を調整するなど色々  } 確立待ちコネクションキュー 確立済みコネクションキュー Listen キュー 子 子 子 accept accept accept
Net::Server lib `-- Net |-- Server |  |-- Daemonize.pm |  |-- Fork.pm |  |-- HTTP.pm |  |-- INET.pm |  |-- MultiType.pm |  |-- Multiplex.pm |  |-- PreFork.pm |  |-- PreForkSimple.pm |  |-- Proto |  |  |-- SSL.pm |  |  |-- SSLEAY.pm |  |  |-- TCP.pm |  |  |-- UDP.pm |  |  `-- UNIX.pm |  |-- Proto.pm |  |-- SIG.pm |  `-- Single.pm |-- Server.pm `-- Server.pod sub run { ### pass package or object  my $self = ref($_[0]) ? shift() : shift->new; $self->_initialize(@_ == 1 ? %{$_[0]} : @_);  # configure all parameters  $self->post_configure;  # verification of passed parameters  $self->post_configure_hook;  # user customizable hook  $self->pre_bind;  # finalize ports to be bound  $self->bind;  # connect to port(s)  # setup selection handle for multi port  $self->post_bind_hook;  # user customizable hook  $self->post_bind;  # allow for chrooting,  # becoming a different user and group  $self->pre_loop_hook;  # user customizable hook  $self->loop;  # repeat accept/process cycle  ### routines inside a standard $self->loop  # $self->accept  # wait for client connection  # $self->run_client_connection  # process client  # $self->done  # indicate if connection is done  $self->server_close;  # close the server and release the port  # this will run pre_server_close_hook  #  close_children  #  post_child_cleanup_hook  #  shutdown_sockets  # and either exit or run restart_close_hook  }
課題 Starman Starlet Catalyst::Engine::HTTP HTTP::Server::PSGI Hoppy(?) socket オプション等をもっと掘り下げる non-blocking についてkwsk
参考书籍

More Related Content

What's hot (20)

驳搁笔颁入门
驳搁笔颁入门驳搁笔颁入门
驳搁笔颁入门
Kenjiro Kubota
?
Elasticsearchを使うときの注意点 公開用スライド
Elasticsearchを使うときの注意点 公開用スライドElasticsearchを使うときの注意点 公開用スライド
Elasticsearchを使うときの注意点 公開用スライド
崇介 藤井
?
Practical migration from JSP to Thymeleaf
Practical migration from JSP to Thymeleaf Practical migration from JSP to Thymeleaf
Practical migration from JSP to Thymeleaf
Toshiki Iga
?
PHP-FPM の子フ?ロセス制御方法と設定をおさらいしよう
PHP-FPM の子フ?ロセス制御方法と設定をおさらいしようPHP-FPM の子フ?ロセス制御方法と設定をおさらいしよう
PHP-FPM の子フ?ロセス制御方法と設定をおさらいしよう
Shohei Okada
?
マルチテナント化で知っておきたいデータベースのこと
マルチテナント化で知っておきたいデータベースのことマルチテナント化で知っておきたいデータベースのこと
マルチテナント化で知っておきたいデータベースのこと
Amazon Web Services Japan
?
世界一わかりやすいClean Architecture
世界一わかりやすいClean Architecture世界一わかりやすいClean Architecture
世界一わかりやすいClean Architecture
Atsushi Nakamura
?
何となく勉强した気分になれるパーサ入门
何となく勉强した気分になれるパーサ入门何となく勉强した気分になれるパーサ入门
何となく勉强した気分になれるパーサ入门
masayoshi takahashi
?
JenkinsとDockerって何が良いの? ?言うてるオレもわからんわ? #jenkinsstudy
JenkinsとDockerって何が良いの? ?言うてるオレもわからんわ? #jenkinsstudyJenkinsとDockerって何が良いの? ?言うてるオレもわからんわ? #jenkinsstudy
JenkinsとDockerって何が良いの? ?言うてるオレもわからんわ? #jenkinsstudy
Kazuhito Miura
?
CyberChefの使い方(HamaCTF2019 WriteUp編)
CyberChefの使い方(HamaCTF2019 WriteUp編)CyberChefの使い方(HamaCTF2019 WriteUp編)
CyberChefの使い方(HamaCTF2019 WriteUp編)
Shota Shinogi
?
PWNの超入門 大和セキュリティ神戸 2018-03-25
PWNの超入門 大和セキュリティ神戸 2018-03-25PWNの超入門 大和セキュリティ神戸 2018-03-25
PWNの超入門 大和セキュリティ神戸 2018-03-25
Isaac Mathis
?
単なるキャッシュじゃないよ!?颈苍蹿颈苍颈蝉辫补苍の绍介
単なるキャッシュじゃないよ!?颈苍蹿颈苍颈蝉辫补苍の绍介単なるキャッシュじゃないよ!?颈苍蹿颈苍颈蝉辫补苍の绍介
単なるキャッシュじゃないよ!?颈苍蹿颈苍颈蝉辫补苍の绍介
AdvancedTechNight
?
Azure Api Management 俺的マニュアル 2020年3月版
Azure Api Management 俺的マニュアル 2020年3月版Azure Api Management 俺的マニュアル 2020年3月版
Azure Api Management 俺的マニュアル 2020年3月版
貴志 上坂
?
颁濒辞耻诲贵谤辞苍迟経由での颁翱搁厂利用
颁濒辞耻诲贵谤辞苍迟経由での颁翱搁厂利用颁濒辞耻诲贵谤辞苍迟経由での颁翱搁厂利用
颁濒辞耻诲贵谤辞苍迟経由での颁翱搁厂利用
Yuta Imai
?
あなたの知らない笔辞蝉迟驳谤别厂蚕尝监视の世界
あなたの知らない笔辞蝉迟驳谤别厂蚕尝监视の世界あなたの知らない笔辞蝉迟驳谤别厂蚕尝监视の世界
あなたの知らない笔辞蝉迟驳谤别厂蚕尝监视の世界
Yoshinori Nakanishi
?
12 分くらいで知るLuaVM
12 分くらいで知るLuaVM12 分くらいで知るLuaVM
12 分くらいで知るLuaVM
Yuki Tamura
?
インフラエンシ?ニアの綺丽て?优しい手顺书の书き方
インフラエンシ?ニアの綺丽て?优しい手顺书の书き方インフラエンシ?ニアの綺丽て?优しい手顺书の书き方
インフラエンシ?ニアの綺丽て?优しい手顺书の书き方
Shohei Koyama
?
「惫补谤禁止」禁止
「惫补谤禁止」禁止「惫补谤禁止」禁止
「惫补谤禁止」禁止
Ryota Murohoshi
?
闯闯鲍骋颁颁颁2022蝉辫谤颈苍驳冲连続画像処理による位置情报计算を支えるマイクロサービスアーキテクチャ
闯闯鲍骋颁颁颁2022蝉辫谤颈苍驳冲连続画像処理による位置情报计算を支えるマイクロサービスアーキテクチャ闯闯鲍骋颁颁颁2022蝉辫谤颈苍驳冲连続画像処理による位置情报计算を支えるマイクロサービスアーキテクチャ
闯闯鲍骋颁颁颁2022蝉辫谤颈苍驳冲连続画像処理による位置情报计算を支えるマイクロサービスアーキテクチャ
Kaname Motoyama
?
Zend OPcacheの速さの秘密を探る
Zend OPcacheの速さの秘密を探るZend OPcacheの速さの秘密を探る
Zend OPcacheの速さの秘密を探る
Yoshio Hanawa
?
笔别苍罢别蝉迟别谤が知っている危ない础奥厂环境の共通点
笔别苍罢别蝉迟别谤が知っている危ない础奥厂环境の共通点 笔别苍罢别蝉迟别谤が知っている危ない础奥厂环境の共通点
笔别苍罢别蝉迟别谤が知っている危ない础奥厂环境の共通点
zaki4649
?
Elasticsearchを使うときの注意点 公開用スライド
Elasticsearchを使うときの注意点 公開用スライドElasticsearchを使うときの注意点 公開用スライド
Elasticsearchを使うときの注意点 公開用スライド
崇介 藤井
?
Practical migration from JSP to Thymeleaf
Practical migration from JSP to Thymeleaf Practical migration from JSP to Thymeleaf
Practical migration from JSP to Thymeleaf
Toshiki Iga
?
PHP-FPM の子フ?ロセス制御方法と設定をおさらいしよう
PHP-FPM の子フ?ロセス制御方法と設定をおさらいしようPHP-FPM の子フ?ロセス制御方法と設定をおさらいしよう
PHP-FPM の子フ?ロセス制御方法と設定をおさらいしよう
Shohei Okada
?
マルチテナント化で知っておきたいデータベースのこと
マルチテナント化で知っておきたいデータベースのことマルチテナント化で知っておきたいデータベースのこと
マルチテナント化で知っておきたいデータベースのこと
Amazon Web Services Japan
?
世界一わかりやすいClean Architecture
世界一わかりやすいClean Architecture世界一わかりやすいClean Architecture
世界一わかりやすいClean Architecture
Atsushi Nakamura
?
何となく勉强した気分になれるパーサ入门
何となく勉强した気分になれるパーサ入门何となく勉强した気分になれるパーサ入门
何となく勉强した気分になれるパーサ入门
masayoshi takahashi
?
JenkinsとDockerって何が良いの? ?言うてるオレもわからんわ? #jenkinsstudy
JenkinsとDockerって何が良いの? ?言うてるオレもわからんわ? #jenkinsstudyJenkinsとDockerって何が良いの? ?言うてるオレもわからんわ? #jenkinsstudy
JenkinsとDockerって何が良いの? ?言うてるオレもわからんわ? #jenkinsstudy
Kazuhito Miura
?
CyberChefの使い方(HamaCTF2019 WriteUp編)
CyberChefの使い方(HamaCTF2019 WriteUp編)CyberChefの使い方(HamaCTF2019 WriteUp編)
CyberChefの使い方(HamaCTF2019 WriteUp編)
Shota Shinogi
?
PWNの超入門 大和セキュリティ神戸 2018-03-25
PWNの超入門 大和セキュリティ神戸 2018-03-25PWNの超入門 大和セキュリティ神戸 2018-03-25
PWNの超入門 大和セキュリティ神戸 2018-03-25
Isaac Mathis
?
単なるキャッシュじゃないよ!?颈苍蹿颈苍颈蝉辫补苍の绍介
単なるキャッシュじゃないよ!?颈苍蹿颈苍颈蝉辫补苍の绍介単なるキャッシュじゃないよ!?颈苍蹿颈苍颈蝉辫补苍の绍介
単なるキャッシュじゃないよ!?颈苍蹿颈苍颈蝉辫补苍の绍介
AdvancedTechNight
?
Azure Api Management 俺的マニュアル 2020年3月版
Azure Api Management 俺的マニュアル 2020年3月版Azure Api Management 俺的マニュアル 2020年3月版
Azure Api Management 俺的マニュアル 2020年3月版
貴志 上坂
?
颁濒辞耻诲贵谤辞苍迟経由での颁翱搁厂利用
颁濒辞耻诲贵谤辞苍迟経由での颁翱搁厂利用颁濒辞耻诲贵谤辞苍迟経由での颁翱搁厂利用
颁濒辞耻诲贵谤辞苍迟経由での颁翱搁厂利用
Yuta Imai
?
あなたの知らない笔辞蝉迟驳谤别厂蚕尝监视の世界
あなたの知らない笔辞蝉迟驳谤别厂蚕尝监视の世界あなたの知らない笔辞蝉迟驳谤别厂蚕尝监视の世界
あなたの知らない笔辞蝉迟驳谤别厂蚕尝监视の世界
Yoshinori Nakanishi
?
12 分くらいで知るLuaVM
12 分くらいで知るLuaVM12 分くらいで知るLuaVM
12 分くらいで知るLuaVM
Yuki Tamura
?
インフラエンシ?ニアの綺丽て?优しい手顺书の书き方
インフラエンシ?ニアの綺丽て?优しい手顺书の书き方インフラエンシ?ニアの綺丽て?优しい手顺书の书き方
インフラエンシ?ニアの綺丽て?优しい手顺书の书き方
Shohei Koyama
?
「惫补谤禁止」禁止
「惫补谤禁止」禁止「惫补谤禁止」禁止
「惫补谤禁止」禁止
Ryota Murohoshi
?
闯闯鲍骋颁颁颁2022蝉辫谤颈苍驳冲连続画像処理による位置情报计算を支えるマイクロサービスアーキテクチャ
闯闯鲍骋颁颁颁2022蝉辫谤颈苍驳冲连続画像処理による位置情报计算を支えるマイクロサービスアーキテクチャ闯闯鲍骋颁颁颁2022蝉辫谤颈苍驳冲连続画像処理による位置情报计算を支えるマイクロサービスアーキテクチャ
闯闯鲍骋颁颁颁2022蝉辫谤颈苍驳冲连続画像処理による位置情报计算を支えるマイクロサービスアーキテクチャ
Kaname Motoyama
?
Zend OPcacheの速さの秘密を探る
Zend OPcacheの速さの秘密を探るZend OPcacheの速さの秘密を探る
Zend OPcacheの速さの秘密を探る
Yoshio Hanawa
?
笔别苍罢别蝉迟别谤が知っている危ない础奥厂环境の共通点
笔别苍罢别蝉迟别谤が知っている危ない础奥厂环境の共通点 笔别苍罢别蝉迟别谤が知っている危ない础奥厂环境の共通点
笔别苍罢别蝉迟别谤が知っている危ない础奥厂环境の共通点
zaki4649
?

Similar to サーバー実装いろいろ (20)

Tottoruby 20110903
Tottoruby 20110903Tottoruby 20110903
Tottoruby 20110903
Takashi SAKAGUCHI
?
Scripting Layer for Android + Perl
Scripting Layer for Android + PerlScripting Layer for Android + Perl
Scripting Layer for Android + Perl
Naoya Ito
?
FD.io 痴笔笔事始め
FD.io 痴笔笔事始めFD.io 痴笔笔事始め
FD.io 痴笔笔事始め
tetsusat
?
Apacheの展望とmod_perlの超絶技巧 #yapcasia
Apacheの展望とmod_perlの超絶技巧 #yapcasiaApacheの展望とmod_perlの超絶技巧 #yapcasia
Apacheの展望とmod_perlの超絶技巧 #yapcasia
鉄次 尾形
?
var RAC3 = ReactiveCocoa + Swift @ ReactiveCocoa Tokyo #rac_tokyo 10/18
var RAC3 = ReactiveCocoa + Swift @ ReactiveCocoa Tokyo #rac_tokyo 10/18var RAC3 = ReactiveCocoa + Swift @ ReactiveCocoa Tokyo #rac_tokyo 10/18
var RAC3 = ReactiveCocoa + Swift @ ReactiveCocoa Tokyo #rac_tokyo 10/18
Syo Ikeda
?
Inside mobage platform
Inside mobage platformInside mobage platform
Inside mobage platform
Toru Yamaguchi
?
Perl 非同期プログラミング
Perl 非同期プログラミングPerl 非同期プログラミング
Perl 非同期プログラミング
lestrrat
?
配布用Beginnerならきっと役立つmaster slave環境
配布用Beginnerならきっと役立つmaster slave環境配布用Beginnerならきっと役立つmaster slave環境
配布用Beginnerならきっと役立つmaster slave環境
yut148atgmaildotcom
?
痴笔笔事始め
痴笔笔事始め痴笔笔事始め
痴笔笔事始め
npsg
?
サーバーを作ろう (毎週のハンズオン勉強会の資料)
サーバーを作ろう (毎週のハンズオン勉強会の資料)サーバーを作ろう (毎週のハンズオン勉強会の資料)
サーバーを作ろう (毎週のハンズオン勉強会の資料)
ひとし あまの
?
泥臭い运用から、プログラマブルインフラ构筑(に行きたい)
泥臭い运用から、プログラマブルインフラ构筑(に行きたい) 泥臭い运用から、プログラマブルインフラ构筑(に行きたい)
泥臭い运用から、プログラマブルインフラ构筑(に行きたい)
Akihiro Kuwano
?
Serf / Consul 入門 ~仕事を楽しくしよう~
Serf / Consul 入門 ~仕事を楽しくしよう~Serf / Consul 入門 ~仕事を楽しくしよう~
Serf / Consul 入門 ~仕事を楽しくしよう~
Masahito Zembutsu
?
Trema での Open vSwitch
Trema での Open vSwitchTrema での Open vSwitch
Trema での Open vSwitch
kazuyas
?
Vyatta 改造入門
Vyatta 改造入門Vyatta 改造入門
Vyatta 改造入門
Masakazu Asama
?
SmartPhone development guide with CoffeeScript + Node + HTML5 Technology, for...
SmartPhone development guide with CoffeeScript + Node + HTML5 Technology, for...SmartPhone development guide with CoffeeScript + Node + HTML5 Technology, for...
SmartPhone development guide with CoffeeScript + Node + HTML5 Technology, for...
Naoya Ito
?
Html5, Web Applications 2
Html5, Web Applications 2Html5, Web Applications 2
Html5, Web Applications 2
totty jp
?
Scripting Layer for Android + Perl
Scripting Layer for Android + PerlScripting Layer for Android + Perl
Scripting Layer for Android + Perl
Naoya Ito
?
FD.io 痴笔笔事始め
FD.io 痴笔笔事始めFD.io 痴笔笔事始め
FD.io 痴笔笔事始め
tetsusat
?
Apacheの展望とmod_perlの超絶技巧 #yapcasia
Apacheの展望とmod_perlの超絶技巧 #yapcasiaApacheの展望とmod_perlの超絶技巧 #yapcasia
Apacheの展望とmod_perlの超絶技巧 #yapcasia
鉄次 尾形
?
var RAC3 = ReactiveCocoa + Swift @ ReactiveCocoa Tokyo #rac_tokyo 10/18
var RAC3 = ReactiveCocoa + Swift @ ReactiveCocoa Tokyo #rac_tokyo 10/18var RAC3 = ReactiveCocoa + Swift @ ReactiveCocoa Tokyo #rac_tokyo 10/18
var RAC3 = ReactiveCocoa + Swift @ ReactiveCocoa Tokyo #rac_tokyo 10/18
Syo Ikeda
?
Perl 非同期プログラミング
Perl 非同期プログラミングPerl 非同期プログラミング
Perl 非同期プログラミング
lestrrat
?
配布用Beginnerならきっと役立つmaster slave環境
配布用Beginnerならきっと役立つmaster slave環境配布用Beginnerならきっと役立つmaster slave環境
配布用Beginnerならきっと役立つmaster slave環境
yut148atgmaildotcom
?
痴笔笔事始め
痴笔笔事始め痴笔笔事始め
痴笔笔事始め
npsg
?
サーバーを作ろう (毎週のハンズオン勉強会の資料)
サーバーを作ろう (毎週のハンズオン勉強会の資料)サーバーを作ろう (毎週のハンズオン勉強会の資料)
サーバーを作ろう (毎週のハンズオン勉強会の資料)
ひとし あまの
?
泥臭い运用から、プログラマブルインフラ构筑(に行きたい)
泥臭い运用から、プログラマブルインフラ构筑(に行きたい) 泥臭い运用から、プログラマブルインフラ构筑(に行きたい)
泥臭い运用から、プログラマブルインフラ构筑(に行きたい)
Akihiro Kuwano
?
Serf / Consul 入門 ~仕事を楽しくしよう~
Serf / Consul 入門 ~仕事を楽しくしよう~Serf / Consul 入門 ~仕事を楽しくしよう~
Serf / Consul 入門 ~仕事を楽しくしよう~
Masahito Zembutsu
?
Trema での Open vSwitch
Trema での Open vSwitchTrema での Open vSwitch
Trema での Open vSwitch
kazuyas
?
SmartPhone development guide with CoffeeScript + Node + HTML5 Technology, for...
SmartPhone development guide with CoffeeScript + Node + HTML5 Technology, for...SmartPhone development guide with CoffeeScript + Node + HTML5 Technology, for...
SmartPhone development guide with CoffeeScript + Node + HTML5 Technology, for...
Naoya Ito
?
Html5, Web Applications 2
Html5, Web Applications 2Html5, Web Applications 2
Html5, Web Applications 2
totty jp
?

Recently uploaded (11)

【卒业论文】尝尝惭を用いた惭耻濒迟颈-础驳别苍迟-顿别产补迟别における反论の効果に関する研究
【卒业论文】尝尝惭を用いた惭耻濒迟颈-础驳别苍迟-顿别产补迟别における反论の効果に関する研究【卒业论文】尝尝惭を用いた惭耻濒迟颈-础驳别苍迟-顿别产补迟别における反论の効果に関する研究
【卒业论文】尝尝惭を用いた惭耻濒迟颈-础驳别苍迟-顿别产补迟别における反论の効果に関する研究
harmonylab
?
空间オーディオを用いたヘッドパスワードの提案と音源提示手法の最适化
空间オーディオを用いたヘッドパスワードの提案と音源提示手法の最适化空间オーディオを用いたヘッドパスワードの提案と音源提示手法の最适化
空间オーディオを用いたヘッドパスワードの提案と音源提示手法の最适化
sugiuralab
?
2025フードテックWeek大阪展示会 - LoRaWANを使った複数ポイント温度管理 by AVNET玉井部長
2025フードテックWeek大阪展示会 - LoRaWANを使った複数ポイント温度管理 by AVNET玉井部長2025フードテックWeek大阪展示会 - LoRaWANを使った複数ポイント温度管理 by AVNET玉井部長
2025フードテックWeek大阪展示会 - LoRaWANを使った複数ポイント温度管理 by AVNET玉井部長
CRI Japan, Inc.
?
ラズパイを使って作品を作ったらラズパイコンテストで碍厂驰赏を貰って、さらに、文化庁メディア芸术祭で审査员推荐作品に选ばれてしまった件?自作チップでラズパイ...
ラズパイを使って作品を作ったらラズパイコンテストで碍厂驰赏を貰って、さらに、文化庁メディア芸术祭で审査员推荐作品に选ばれてしまった件?自作チップでラズパイ...ラズパイを使って作品を作ったらラズパイコンテストで碍厂驰赏を貰って、さらに、文化庁メディア芸术祭で审査员推荐作品に选ばれてしまった件?自作チップでラズパイ...
ラズパイを使って作品を作ったらラズパイコンテストで碍厂驰赏を貰って、さらに、文化庁メディア芸术祭で审査员推荐作品に选ばれてしまった件?自作チップでラズパイ...
Industrial Technology Research Institute (ITRI)(工業技術研究院, 工研院)
?
狈辞诲补滨迟蝉耻办颈冲反省観点の分类に基づく试合の振り返り支援システムに関する有用性検証冲顿贰滨惭2025
狈辞诲补滨迟蝉耻办颈冲反省観点の分类に基づく试合の振り返り支援システムに関する有用性検証冲顿贰滨惭2025狈辞诲补滨迟蝉耻办颈冲反省観点の分类に基づく试合の振り返り支援システムに関する有用性検証冲顿贰滨惭2025
狈辞诲补滨迟蝉耻办颈冲反省観点の分类に基づく试合の振り返り支援システムに関する有用性検証冲顿贰滨惭2025
Matsushita Laboratory
?
実はアナタの身近にある!? Linux のチェックポイント/レストア機能 (NTT Tech Conference 2025 発表資料)
実はアナタの身近にある!? Linux のチェックポイント/レストア機能 (NTT Tech Conference 2025 発表資料)実はアナタの身近にある!? Linux のチェックポイント/レストア機能 (NTT Tech Conference 2025 発表資料)
実はアナタの身近にある!? Linux のチェックポイント/レストア機能 (NTT Tech Conference 2025 発表資料)
NTT DATA Technology & Innovation
?
LF Decentralized Trust Tokyo Meetup 3
LF Decentralized Trust Tokyo Meetup 3LF Decentralized Trust Tokyo Meetup 3
LF Decentralized Trust Tokyo Meetup 3
LFDT Tokyo Meetup
?
【卒业论文】深层学习によるログ异常検知モデルを用いたサイバー攻撃検知に関する研究
【卒业论文】深层学习によるログ异常検知モデルを用いたサイバー攻撃検知に関する研究【卒业论文】深层学习によるログ异常検知モデルを用いたサイバー攻撃検知に関する研究
【卒业论文】深层学习によるログ异常検知モデルを用いたサイバー攻撃検知に関する研究
harmonylab
?
测距センサと滨惭鲍センサを用いた指轮型デバイスにおける颜认証システムの提案
测距センサと滨惭鲍センサを用いた指轮型デバイスにおける颜认証システムの提案测距センサと滨惭鲍センサを用いた指轮型デバイスにおける颜认証システムの提案
测距センサと滨惭鲍センサを用いた指轮型デバイスにおける颜认証システムの提案
sugiuralab
?
第1回日本理学疗法推论学会学术大会での発表资料(2025年3月2日 高桥可奈恵)
第1回日本理学疗法推论学会学术大会での発表资料(2025年3月2日 高桥可奈恵)第1回日本理学疗法推论学会学术大会での発表资料(2025年3月2日 高桥可奈恵)
第1回日本理学疗法推论学会学术大会での発表资料(2025年3月2日 高桥可奈恵)
Matsushita Laboratory
?
贬补谤耻办颈厂丑颈苍办补飞补冲尝尝惭を利用した果树农家の経験知の対话的蓄积支援冲诲别颈尘2025
贬补谤耻办颈厂丑颈苍办补飞补冲尝尝惭を利用した果树农家の経験知の対话的蓄积支援冲诲别颈尘2025贬补谤耻办颈厂丑颈苍办补飞补冲尝尝惭を利用した果树农家の経験知の対话的蓄积支援冲诲别颈尘2025
贬补谤耻办颈厂丑颈苍办补飞补冲尝尝惭を利用した果树农家の経験知の対话的蓄积支援冲诲别颈尘2025
Matsushita Laboratory
?
【卒业论文】尝尝惭を用いた惭耻濒迟颈-础驳别苍迟-顿别产补迟别における反论の効果に関する研究
【卒业论文】尝尝惭を用いた惭耻濒迟颈-础驳别苍迟-顿别产补迟别における反论の効果に関する研究【卒业论文】尝尝惭を用いた惭耻濒迟颈-础驳别苍迟-顿别产补迟别における反论の効果に関する研究
【卒业论文】尝尝惭を用いた惭耻濒迟颈-础驳别苍迟-顿别产补迟别における反论の効果に関する研究
harmonylab
?
空间オーディオを用いたヘッドパスワードの提案と音源提示手法の最适化
空间オーディオを用いたヘッドパスワードの提案と音源提示手法の最适化空间オーディオを用いたヘッドパスワードの提案と音源提示手法の最适化
空间オーディオを用いたヘッドパスワードの提案と音源提示手法の最适化
sugiuralab
?
2025フードテックWeek大阪展示会 - LoRaWANを使った複数ポイント温度管理 by AVNET玉井部長
2025フードテックWeek大阪展示会 - LoRaWANを使った複数ポイント温度管理 by AVNET玉井部長2025フードテックWeek大阪展示会 - LoRaWANを使った複数ポイント温度管理 by AVNET玉井部長
2025フードテックWeek大阪展示会 - LoRaWANを使った複数ポイント温度管理 by AVNET玉井部長
CRI Japan, Inc.
?
ラズパイを使って作品を作ったらラズパイコンテストで碍厂驰赏を貰って、さらに、文化庁メディア芸术祭で审査员推荐作品に选ばれてしまった件?自作チップでラズパイ...
ラズパイを使って作品を作ったらラズパイコンテストで碍厂驰赏を貰って、さらに、文化庁メディア芸术祭で审査员推荐作品に选ばれてしまった件?自作チップでラズパイ...ラズパイを使って作品を作ったらラズパイコンテストで碍厂驰赏を貰って、さらに、文化庁メディア芸术祭で审査员推荐作品に选ばれてしまった件?自作チップでラズパイ...
ラズパイを使って作品を作ったらラズパイコンテストで碍厂驰赏を貰って、さらに、文化庁メディア芸术祭で审査员推荐作品に选ばれてしまった件?自作チップでラズパイ...
Industrial Technology Research Institute (ITRI)(工業技術研究院, 工研院)
?
狈辞诲补滨迟蝉耻办颈冲反省観点の分类に基づく试合の振り返り支援システムに関する有用性検証冲顿贰滨惭2025
狈辞诲补滨迟蝉耻办颈冲反省観点の分类に基づく试合の振り返り支援システムに関する有用性検証冲顿贰滨惭2025狈辞诲补滨迟蝉耻办颈冲反省観点の分类に基づく试合の振り返り支援システムに関する有用性検証冲顿贰滨惭2025
狈辞诲补滨迟蝉耻办颈冲反省観点の分类に基づく试合の振り返り支援システムに関する有用性検証冲顿贰滨惭2025
Matsushita Laboratory
?
実はアナタの身近にある!? Linux のチェックポイント/レストア機能 (NTT Tech Conference 2025 発表資料)
実はアナタの身近にある!? Linux のチェックポイント/レストア機能 (NTT Tech Conference 2025 発表資料)実はアナタの身近にある!? Linux のチェックポイント/レストア機能 (NTT Tech Conference 2025 発表資料)
実はアナタの身近にある!? Linux のチェックポイント/レストア機能 (NTT Tech Conference 2025 発表資料)
NTT DATA Technology & Innovation
?
LF Decentralized Trust Tokyo Meetup 3
LF Decentralized Trust Tokyo Meetup 3LF Decentralized Trust Tokyo Meetup 3
LF Decentralized Trust Tokyo Meetup 3
LFDT Tokyo Meetup
?
【卒业论文】深层学习によるログ异常検知モデルを用いたサイバー攻撃検知に関する研究
【卒业论文】深层学习によるログ异常検知モデルを用いたサイバー攻撃検知に関する研究【卒业论文】深层学习によるログ异常検知モデルを用いたサイバー攻撃検知に関する研究
【卒业论文】深层学习によるログ异常検知モデルを用いたサイバー攻撃検知に関する研究
harmonylab
?
测距センサと滨惭鲍センサを用いた指轮型デバイスにおける颜认証システムの提案
测距センサと滨惭鲍センサを用いた指轮型デバイスにおける颜认証システムの提案测距センサと滨惭鲍センサを用いた指轮型デバイスにおける颜认証システムの提案
测距センサと滨惭鲍センサを用いた指轮型デバイスにおける颜认証システムの提案
sugiuralab
?
第1回日本理学疗法推论学会学术大会での発表资料(2025年3月2日 高桥可奈恵)
第1回日本理学疗法推论学会学术大会での発表资料(2025年3月2日 高桥可奈恵)第1回日本理学疗法推论学会学术大会での発表资料(2025年3月2日 高桥可奈恵)
第1回日本理学疗法推论学会学术大会での発表资料(2025年3月2日 高桥可奈恵)
Matsushita Laboratory
?
贬补谤耻办颈厂丑颈苍办补飞补冲尝尝惭を利用した果树农家の経験知の対话的蓄积支援冲诲别颈尘2025
贬补谤耻办颈厂丑颈苍办补飞补冲尝尝惭を利用した果树农家の経験知の対话的蓄积支援冲诲别颈尘2025贬补谤耻办颈厂丑颈苍办补飞补冲尝尝惭を利用した果树农家の経験知の対话的蓄积支援冲诲别颈尘2025
贬补谤耻办颈厂丑颈苍办补飞补冲尝尝惭を利用した果树农家の経験知の対话的蓄积支援冲诲别颈尘2025
Matsushita Laboratory
?

サーバー実装いろいろ

  • 1. サーバー実装いろいろ その1 反復サーバー (iterative server) 並行サーバー (concurrent server)  ? Fork server  ? PreFork server
  • 3. 粒度を細かくすると下記のように (HTTP サーバとブラウザを想定。つまり TCP) クライアント サーバー SYN SYN, ack ack データ(要求) データ(応答) , 要求の ack 応答の ack FIN ack FIN ack socket,bind,listen accept( ブロック ) accept から戻る read( ブロック ) connect write read( ブロック ) read から戻る サーバが要求を処理 write read( ブロック ) read から戻る close close
  • 4. ?
  • 5. 反復サーバ (iterative server) use strict; use warnings; use IO::Socket; my $socket = IO::Socket::INET->new( Listen => 20, LocalPort => 12345 ) or die; while ( my $con = $socket->accept ) { my $line = <$con>; print $con $line; close $con; } サーバー リクエスト 確立待ちコネクションキュー 確立済みコネクションキュー Listen キュー 3way hand shake 完了後 accept 問題点: リクエストの read でブロックするので複数接続あった場合、 最初の接続がリクエストをもたつくと後の接続が待たされる ことになる
  • 6. Fork サーバ (concurrent server) use strict; use warnings; use IO::Socket; my $socket = IO::Socket::INET->new( Listen => 20, LocalPort => 12345 ) or die; while ( my $con = $socket->accept ) { my $pid = fork; if ( $pid == 0 ) { ## child close $socket; my $line = <$con>; print $con $line; exit(0); } else { ## parent close $con; } } サーバー リクエスト 問題点: accept の度に fork するコスト accept サーバー accept fork サーバー サーバー サーバー サーバー 親 子
  • 7. 余談: pipe(READ, WRITE) 関数 IPC 通信の基礎。親プロセス子プロセスの間で 対話できるようになる。 fork しないとできないわけではなく、より身近な例としてまさしく パイプコマンドがある。「 ls | wc 」 fork READ WRITE 親 親 子 子 READ WRITE READ WRITE READ WRITE READ WRITE READ WRITE
  • 8. PreFork サーバ (concurrent server) use strict; use warnings; use IO::Socket; use POSIX 'WNOHANG'; my $socket = IO::Socket::INET->new( Listen => 20, LocalPort => 12345 ) or die; for ( 1 .. 5 ) { my $pid = fork; if ( $pid == 0 ) { ## child while ( my $con = $socket->accept ) { close $socket; my $line = <$con>; print $con $line; close $con; } exit(0); } } ## parent; $SIG{CHLD} = sub { while ( waitpid( -1, WNOHANG ) > 0 ) { } }; while (1) { ## 子プロセスの数を調整するなど色々 } 確立待ちコネクションキュー 確立済みコネクションキュー Listen キュー 子 子 子 accept accept accept
  • 9. Net::Server lib `-- Net |-- Server | |-- Daemonize.pm | |-- Fork.pm | |-- HTTP.pm | |-- INET.pm | |-- MultiType.pm | |-- Multiplex.pm | |-- PreFork.pm | |-- PreForkSimple.pm | |-- Proto | | |-- SSL.pm | | |-- SSLEAY.pm | | |-- TCP.pm | | |-- UDP.pm | | `-- UNIX.pm | |-- Proto.pm | |-- SIG.pm | `-- Single.pm |-- Server.pm `-- Server.pod sub run { ### pass package or object my $self = ref($_[0]) ? shift() : shift->new; $self->_initialize(@_ == 1 ? %{$_[0]} : @_); # configure all parameters $self->post_configure; # verification of passed parameters $self->post_configure_hook; # user customizable hook $self->pre_bind; # finalize ports to be bound $self->bind; # connect to port(s) # setup selection handle for multi port $self->post_bind_hook; # user customizable hook $self->post_bind; # allow for chrooting, # becoming a different user and group $self->pre_loop_hook; # user customizable hook $self->loop; # repeat accept/process cycle ### routines inside a standard $self->loop # $self->accept # wait for client connection # $self->run_client_connection # process client # $self->done # indicate if connection is done $self->server_close; # close the server and release the port # this will run pre_server_close_hook # close_children # post_child_cleanup_hook # shutdown_sockets # and either exit or run restart_close_hook }
  • 10. 課題 Starman Starlet Catalyst::Engine::HTTP HTTP::Server::PSGI Hoppy(?) socket オプション等をもっと掘り下げる non-blocking についてkwsk