ネットワーク・並行プログラミング・分散オブジェクト

ソケットなどのネットワークプログラミング、分散オブジェクト (主にCORBA)、リモートプロシージャコール (RPC) などを扱います。

並行、並列、分散はこんな感じでしょうか。

並行 (concurrent)
論理的に複数のタスクが同時に動く。逐次の対義語。時分割などで擬似的に実現されているかもしれない。
並列 (parallel)
複数のCPU (コア) で同時に複数のタスクを動かす
分散 (distributed)
複数のシステム(コンピュータ)で複数のタスクを同時に動かす

分散オブジェクト

omniORBのインストール
[2017-05更新] C++ / Python に対応した CORBA ORB.
CORBA again
[2017-05更新] 異なるプログラミング言語の間でRPC. 生き残っている.
ORBit2
GNOMEのCORBA ORB、ORBit2の使いかた. ※ORBit2はすでに廃れている。例えば, omniORB は現在も維持されている。
CORBA ORBインターフェイス
CORBA仕様で定義されるORBのインターフェイス
Rubyで分散オブジェクト (dRuby)
Ruby標準のpure RubyなORB、dRubyの使いかた
Bonobo components
GNOMEの分散コンポーネント技術Bonoboの使いかた

RMI接続実験

Java専用の分散技術RMI (Remote Method Invocation) のテスト。

 CORBAと同様,Linux機(JDK 1.1.6)とWindows機(JDK 1.2)の接続ができない。これがマシンを跨ぐのに失敗してるからか,バージョン間で互換性がないからかは不明。エラーメッセージからは後者のよう。

ネットワーク・並列コンピューティング

IPv6ソケットプログラミング
IPv4/IPv6両対応のプログラムの書き方。
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でのスレッドプログラミング。

minichat

 ソケット非同期通信のテスト。サーバーは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とエンコーディング変換する標準的な方法がない。あぅ。