fork()を用いたマルチクライアントサーバの動作

fork()を用いたマルチクライアントサーバの動作
Python socket module: Just a thin wrapper over the underlying C library's socket calls.
fork()を用いたマルチクライアントサーバ
の動作







fork()型サーバの構造
listen()ステップでのシステムの状況
accept() 直前でのシステムの状況
accept() ステップ
accept() ステップを、一旦、完結する段階
クライアントからのリクエストを処理する段階
複数のクライアントからのリクエストを、多重処理する状態
fork()を用いたマルチクライアントサーバの動作
fork()型サーバの構造
accept()を多重化して実行
サーバ
親(仕事分配)
プロセス
listen()
accept()
サービス
サービス
処理
サービス
処理
サービス
処理
処理
fork()
サーバの
分身(仕事遂行)
子プロセス
実際の処理を
多重化して実行
TCP
クライアント
クライアント クライアント
クライアント
クライアント
クライアント
fork()を用いたマルチクライアントサーバの動作
listen()ステップでのシステムの状況
listen()ファイルディスクリプタ
サーバ
クライアント1
クライアント2
クライアント3
listen()してクライアントからの
リクエストを待っている状態
fork()を用いたマルチクライアントサーバの動作
accept() 直前でのシステムの状況
listen()ファイルディスクリプタ
リクエスト
サーバ
クライアント1
クライアント2
クライアント3
クライアントからリクエストが
飛んで来た(accept()する直前)
fork()を用いたマルチクライアントサーバの動作
accept() ステップ
listen()ファイルディスクリプタ
accept()ファイルディスクリプタ
リクエスト
accept()
サーバ
fork()
クライアント1
サーバ(子)
クライアント2
クライアント3
サーバ側でaccept()し、
子プロセスを生成
fork()を用いたマルチクライアントサーバの動作
accept() ステップを、一旦、完結する段階
listen()ファイルディスクリプタ
accept()ファイルディスクリプタ
サーバ(親)
クライアント1
サーバ(子)
クライアント2
クライアント3
親プロセスはaccept()が作成した
ファイルディスクリプタを閉じ、
子プロセスはlisten()しているファ
イルディスクリプタを閉じる
fork()を用いたマルチクライアントサーバの動作
クライアントからのリクエストを処理する段階
listen()ファイルディスクリプタ
accept()ファイルディスクリプタ
サーバ(親)
クライアント1
サーバ(子)
クライアント2
クライアント3
子プロセスがクライアント1からの
リクエストを処理
親プロセスは他のクライアントか
らの接続要求を待ちつづける
fork()を用いたマルチクライアントサーバの動作
複数のクライアントからのリクエストを、多重
処理する状態
listen()ファイルディスクリプタ
accept()ファイルディスクリプタ
accept()
サーバ(親)
クライアント1
fork()
サーバ(子)
クライアント2
サーバ(子)
クライアント3
新たなクライアントからのリク
エストを受け付けると、再び
fork()し子プロセスを作成する