プロトコルスタックから自作してみた。

Transcript Go Ͱ Network Programming ͢ΔͨΊ ͷΑ· Tomohiro Takezawa ࣗݾհ • ᖒ ༑ത • Github: ttakezawa • Twitter: @takezawa • גࣜձࣾKyashॴଐ • όοΫΤϯυશൠ • ಛʹ VISA QUICPay (Google Pay) ͷϓϩηγϯάγεςϜͳͲ ࣮ͱωοτϫʔΫϓϩάϥϛϯά • ࣮ࡍͷͱ͜ΖɺࣄͰ͏ػձ͋Δʁ • Kyash ͷۀͰඞਢͳͱ͜Ζ͕͋Δ • ΫϨδοτΧʔυͷϓϩηγϯάۀ • ϨΠϠʔͷཧղ͕ਂ·Δͱڧ͍ ͢͜ͱͱɺ͞ͳ͍͜ͱ • ͢͜ͱ • ιέοτϓϩάϥϛϯάશൠ • Go ʹ͓͚Δ I/O ͷΈ • ͞ͳ͍͜ͱ • HTTP • νϟωϧ ࠓͷΞδΣϯμ • ωοτϫʔΫϓϩάϥϛϯάͷجຊతͳΠϯ
In previous articles we talked about: The history of the Select(2) syscall Select(2) being fundamentally broken This time we'll focus on Linux's select(2) successor - the epoll(2) I/O multiplexing syscall. Epoll is relatively young. It was created by Davide Libenzi in 2002. For comparison: Windows did IOCP in 1994 and FreeBSD's kqueue was introduced in July 2000. Unfortunately, even though epoll i
この記事は Kobe University Advent Calendar25日目の記事です。 低レイヤー技術(後述)をこれから学びたい人向けの入門記事です。 自身の経験を踏まえ、より多くの人達にこのレイヤーに興味を持ってほしくて書きました。 決して卒論がやばくてAdvent calendarのネタが作れなかったわけでは(ry なぜこんな記事を書いたか いわゆるシステムプログラミングのような低レイヤー(と言って差し支えない)ジャンルって一体何から始めれば良いのかいまいちピンと来ないし、何が面白いのかも分からないと思われている事が多いと思います。 にもかかわらず低レイヤーの魅力や学び方の指針みたいな物を示した、いわゆる入門記事ってかなり少ないんですよね。 本記事はこれからシステムプログラミングを始めたい方や、既にかじってみたが中々先が見えてこない、将来何の役に立つのか不安という方達に読んでい
UNIXドメインソケット経由でファイルディスクリプタを別のプロセスに渡すことができるらしいと言うことで、試してみました。Manpage of UNIX Manpage of SEND 標準出力を別のプロセスに渡してみます。渡された側のプロセスは、自分の標準入力からの入力を、渡された標準出力に出力しています。 ライブラリ(fdtransport.h): #ifndef FDTRANSPORT_H__ #define FDTRANSPORT_H__ #include <unistd.h> #include <sys/types.h> #include <sys/stat.h> #include <sys/socket.h> #include <sys/un.h> #include <fcntl.h> #include <string.h> /* UNIXドメインソケットを待ち受ける */ /*
Android書いてますか? これなに 2013年10月13日あたりに流行ってそうな,Android非同期通信処理方法のススメを,Android非同期通信何それ?な人に向けて簡単に情報をまとめる Android普段全く書いてないけどここ数日少し調べた自分が知識の共有のために残す また将来的には流行りは変わるので今しか使えない 転用ばかりで申し訳ない感じなので日常的にAndroid開発してる方はお帰りください 最低限動かすための,すぐに動かすための情報しか書いてないので良くない情報もある Androidでの非同期通信処理 サーバとの通信を行う際に記述しなければならない処理.Androidではメインスレッド上で通信を行う事が出来ないため,サーバとの通信を行うには非同期スレッドを立てなければならない. 昔の処理 Android2.x時代はメインスレッドに直接処理を書けたらしい 非同期処理にしなけ
Home > Coding > Socket Programming > Python > Python socket programming Tutorial – How to Code Client and Server Socket programming in Python This is a quick guide/tutorial on socket programming in python. Socket programming python is very similar to C. To summarise the basics, sockets are the fundamental "things" behind any kind of network communications done by your computer. For example when yo
CEDEC 2012ではドラゴンクエストXは「世界は一つ」を実現するためにどのようなサーバ構成にしているのか?ということで、オンライン作品であるドラクエXを支えるサーバの構成が講演されましたが、ゲームサーバー&ネットワークエンジン「ProudNet」の開発者であるNettention社のCEOであるHyunjik Baeさんは、韓国のオンラインゲームのサーバー開発と利用の経験を通して大規模プレイヤーのためのリアルタイムネットワーク同期技術について講演しました。 サーバーマシン1台でMMO同時接続者数10,000名を実現する方法 | CEDEC 2012 | Computer Entertaintment Developers Conference http://cedec.cesa.or.jp/2012/program/AB/C12_I0284.html Hyunjik Bae: こんにち
サーバ周りの勉強していると、たまにselectとかepollとか言葉が出てきて、理解できてなかったので調べてみた。 I/Oの多重化 例えばサーバ周りの実装を、特に何も考えずにやると、I/Oでブロッキングが発生し、一つのクライアントとしか通信できないということが起こります。これを解決するために fork threads I/Oの多重化 非同期I/O といった方法があります。 この中のI/Oの多重化を実装するためのシステムコールとして、select, poll, epoll, kqueueなどは実装されているようです。 少し調べてみると、次のような記述のような機能をそれぞれが実装するようです。 プログラムで複数のファイルディスクリプタを監視し、 一つ以上のファイルディスクリプタがある種の I/O 操作の 「ready (準備ができた)」状態 (例えば、読み込み可能になった状態) になるまで待つ
だいぶ前から iPhone アプリ作成でネットワーク系の機能を作るときには libev を愛用してるのだが、今日 node をいじっていたら libuv がなかなかよさそうに感じた。 libuv は libev が Windows で動かないからっていう理由で始まったプロジェクトだとおもうけど、Linux などの環境においても libev をラップしつつ、より便利な機能が追加されていていわば C でネットワークプログラミングするためのフレームワークといえるくらいになってる、みたい。(まだ詳しく見たわけじゃないけど) libev は基本的に io 監視と timer のみで、socket の生成などは基本的に自分で syscall 呼んでつくる必要があるけど、libuv は uv_tcp_* とか uv_udp_* といったAPI郡をもってて便利そう。 あと、非同期 DNS ルックアップがサ
前エントリWeb2.0とC10Kに関する数々の誤解に関してはいろいろツッコミをいただいた(ありがとうございます). 名無し 『誤読した上にえらそうに微妙な解説するあたり恥ずかしすぎます。』 えらそうで微妙な解説なのはまぁそうなので否定しないが,誤読とはなんのことだろう? こういうときは今はやりの「スルー力」を発揮するのが大人のインターネットかと思ったけれど, 私のBlogが扱う内容は非常に狭く,さらにそれに対して突っ込もうと思う人の 意見はなにかしらの真実が含まれるはずと考えていたところ,下記エントリがあった. 元記事の人は上でいう 3,6 あたりを書いていて,id:yamaz さんは 3 するなら 4 とか常識だろ,と噛みついているように読めました。. なるほど,私の前エントリは@ITの元記事に対して噛みついているように 読めるようだ(言われてみればたしかにそう読める). 実際の所は元記
このページは、Winsock Programmer's FAQ の日本語訳です。この FAQ の原文はWarren Young 氏によるもので、Winsock Programmer's FAQのサイトで公開されているものです。このページで公開してい る日本語訳は、同氏の許可を得て、私(Keisuke MORI)が翻訳、公開して います。この FAQ のオリジナルの歴史や著者については、序文 の章を参照して下さい。 現時点では、まだ全部の章の翻訳は完了していません。未訳の章は 原文のままで残っていますのでご了承ください(実はこの翻訳は、かな り以前から着手していたのですが、どうも遅々として進まないので:-) まずはできたところから公開することにしました)。 なお、この日本語訳FAQは、常に最新であるという保証はできません ので、最新の情報については適宜オリジナルのFAQを参照してくださる よ
Winsock Error Code エラー番号順 ・以下の英語の個所は WinSock Development Information のページの内容を使わせていただきました。m(_ _)m ・日本語の個所は - WinSock 1.1/2.0 Reference on Web -のページの内容を使わせていただいたのですが、年月を経て消滅してしまったようです(Wayback Machineのアーカイブ)。 ・Microsoftは Windows Sockets Error Codes のページで情報提供してます。 ・エラー番号を赤字で表示したものは、過去に AN HTTPD ゲストブック/コメント集に登場(errors.logに記録される)したことがあります。
ネットワークプログラミングの基礎知識 ここでは IP アドレスやポート番号、クライアントとサーバの役割などを説明し、 perl・C言語・Java などでソケット (Socket) を使った HTTP クライアントや POP3 クライアント、簡単なサーバを作成してみます。 要はネットワークプログラミングをやってみよう、ということです。 このページのサンプルプログラムは、RFC などの規格に準拠した「正しい」プログラムではありません。 また、全体的にエラー処理が不十分です (今後改善する予定です)。 あくまでも概要を理解するためのサンプルととらえてください。 もし本気でしっかりとしたクライアントやサーバを書きたいなら、このページを読んだ上で、 さらに RFC を熟読し、そして wget・Apache・ftp コマンドなどのソースを参考にしてください。 このページに間違いを見付けたら、掲示板 で
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く