あなたの大部分の作業を完全に異なるものに置き換える前に、それを調整して、望ましくない遅延を取り除くことが価値があります。そうすることは、ソケットオプションをsetsockopt()
で変更するのと同じくらい簡単かもしれません。特に、TCP_NODELAY
オプションを設定することで、関連するソケットでNagle's algorithmを無効にすると効果があるようです。そうするためにこのサンプルコードはhttp://www.unixguide.net/network/socketfaq/2.16.shtmlから、わずかな変更で、コピーされます。
#include <sys/socket.h>
#include <netinet/in.h>
int flag = 1;
int result = setsockopt(sock, /* socket affected */
IPPROTO_TCP, /* set option at TCP level */
TCP_NODELAY, /* name of option */
&flag,
sizeof(int)); /* length of option value */
if (result < 0)
... handle the error ...
Unixドメインソケット(AF_UNIX
)の代わりに、TCPソケットに切り替えることであろうしようとする次の最も破壊オプション。実際、常に同じホスト上で動作することが保証されている2つのプロセス間の通信では、これはTCPよりも全体的に優れた選択肢であり、依然としてソケットインターフェイスです。
パイプ(各方向に1つ)、メッセージキュー、共有メモリのアプローチに関するいくつかのバリエーションなどの他の選択肢がありますが、出発点を考えれば、最初にソケットベースの代替案を除外します。
「より良い」という定義に依存します。確かに、UNIXドメインソケット、共有メモリ、パイプなどに有利な議論があります。どのような機能について気にしていますか? (つまり、1つの方法を測定して別のものより「良い」方法を測定するメトリックは何ですか?) –
クロスプラットフォームソフトウェアで動作するnotifier.A通知機能が必要です。Cサービスで何らかの変更が発生すると、目的Cがそれを受け取るUI。私はソケットを使ってこれをやっています。 –
@サイマルラは、IPCメカニズムのどの特性が、他のものよりも優れているかどうかを判断する上で重要であるとは言いません。もし私があなたを正しく理解すれば、あなたはすでに作品を持っているので、何らかの形でそれに不満はありますか? –