ソケットなどのネットワークプログラミング、分散オブジェクト (主にCORBA)、リモートプロシージャコール (RPC) などを扱います。
並行、並列、分散はこんな感じでしょうか。
- 並行 (concurrent)
- 論理的に複数のタスクが同時に動く。逐次の対義語。時分割などで擬似的に実現されているかもしれない。
- 並列 (parallel)
- 複数のCPU (コア) で同時に複数のタスクを動かす
- 分散 (distributed)
- 複数のシステム(コンピュータ)で複数のタスクを同時に動かす
分散オブジェクト
CORBA
- omniORBのインストール
- [2017-05更新] C++ / Python に対応した CORBA ORB.
- CORBA again
- [2017-05更新] 異なるプログラミング言語の間でRPC. 生き残っている.
- ORBit2
- GNOMEのCORBA ORB、ORBit2の使いかた. ※ORBit2はすでに廃れている。例えば, omniORB は現在も維持されている。
- CORBA ORBインターフェイス
- CORBA仕様で定義されるORBのインターフェイス
- Bonobo components
- GNOMEの分散コンポーネント技術Bonoboの使いかた
そのほか
- Thrift RPC: Non-blockingサーバのサンプル [C++]
- [2019-09] ポータビリティの高い、簡易なRPC. 複数のクライアントからの呼び出しに対応するには、それなりの書き方をしなければならない。
- Rubyで分散オブジェクト (dRuby)
- Ruby標準のpure RubyなORB、dRubyの使いかた
Java専用の分散技術RMI (Remote Method Invocation) のテスト。
Java 11: RMI over IIOP を IIOP を使わないよう書き換える
ネットワーク・並列コンピューティング
IPv4アドレス枯渇と高くついたIPv6 (メモ)
IPv6ソケットのサンプルのシリーズ。
- IPv6ソケットプログラミング [C++] IPv4/IPv6両対応のプログラムの書き方。サーバ, クライアントのサンプル.
- Non-blocking ソケットで IPv4/IPv6両対応 (クライアント側) [C++] [GTK4] GTK4 のイベントループと組み合わせる。
- Qt GUIアプリでのマルチスレッド・非同期ソケット通信 [C++] [Qt5/Qt6] Qt の signal, slot の力を活用.
- libuv C10K〜C100K サーバサンプル [C++] 非同期I/O で同時接続1,000 を超える.
HTTP/2 を実装してみる。
- streambuf を拡張し, ソケット対応 [C++]
- IOストリーム.
- HTTP/2 クライアント実装サンプル (非TLS)
- HTTP/2 over TCP. [2018.6] new!
- HTTP/2 クライアント実装サンプル (TLS版)
- HTTP/2 over TLS. [2018.6] new!
- HTTP/2サンプル実装 (共通ルーチン)
- 上記, HTTP/2 非TLS版, TLS版の共通ルーチン.
- MPICH2のインストール
- クラスタ環境の用意。
スレッド
- スレッドプログラミング (pthread)
- UNIXでのスレッドプログラミング。
ソケット非同期通信のテスト。サーバーはLinux,クライアントはWindows, Linux, Java版を用意した。
Java版はスタンドアロン,アプレットのいずれとしても動作し,JDK 1.2 on Windows, JDK 1.1.6 on Linux, Netscape Navigator 4.5 on Windowsで確認した。Internet Explorer 4.0, Netscape Navigator 4.07 on Linuxでは動かなかった。IEで動かなかったのは,かなり謎。
Java版をアプレットとして動かすとき,ユーザー名,サーバーのポート番号を決め打ちしてる(*1)ので,ソースを修正しないといけない。また,Javaアプレットはダウンロード先のホストとしか通信できないので,.classファイルをWebサーバーに置く。
エンコーディングの変換をしてないので,異なるOS間では日本語は通らない。Linux版はEUC-JP, Windows版はShift_JISでいいんだが,Java版が難しい(*2)。
Note.
(1999.08.09追記) Windowsでの標準エンコーディングはシフトJISではない。ISO/IEC 646 IRVとJIS X 0208をエンコードした「932」。
*1: アプレットからダイアログボックスを出す方法,あるいはgetlogin()に相当する方法が分からなかった。
*2: 標準のエンコーディングがMS932, ISO8859_1, SJISと多様で,どの環境でも使えるエンコーディング,又は実行時に使えるエンコーディング一覧を取得する方法がない。Javaは内部UnicodeなのにUTF-8を指定したらJava2 VM以外例外を投げるし。自前でUTF-8変換すればいいが,今度はLinux版でiconv()がないため,EUC-JPとエンコーディング変換する標準的な方法がない。あぅ。