INETドメイン
異なるマシンで動作しているプロセス間の通信を行うためのソケット。
UNIXドメイン
同じマシン内で動作しているプロセス間の通信を行うためのソケット。
INETドメインソケットでもループバックアドレスを利用することで同一マシン内の通信はできるが、UNIXドメインソケットの方が高速である。
INETドメインソケットのサンプル
inet_server.py
bindするときにIP、PORTを指定する。
import socket IP = '127.0.0.1' PORT = 5005 BUFFER_SIZE = 1024 s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.bind((IP, PORT)) s.listen(1) conn, addr = s.accept() while 1: data = conn.recv(BUFFER_SIZE) if not data: break msg = data.decode('utf-8') msg = msg[::-1] conn.send(msg.encode('utf-8')) conn.close()
inet_client.py
import socket IP = '127.0.0.1' PORT = 5005 BUFFER_SIZE = 1024 s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.connect((IP, PORT)) msg = "ABCDEFG" s.send(msg.encode('utf-8')) data = s.recv(BUFFER_SIZE) print (data.decode('utf-8')) s.close()
プロセスIDからINETドメインソケットを調べる。
$ ps -ef | grep python 501 9165 2011 0 11:51PM ttys000 0:00.04 python inet_server.py $ lsof -n -i -P | grep 9165 python3.5 9165 kenjih 3u IPv4 0xf27949601620cf2b 0t0 TCP 127.0.0.1:5005 (LISTEN)
UNIXドメインソケットのサンプル
unix_server.py
bindするときにファイル名を指定する。
UNIXドメインソケットでは、アドレス・名前空間としてファイルシステムを使用する。
unix_client.py
プロセスIDからUNIXドメインソケットを調べる。
unix_server.py
bindするときにファイル名を指定する。
UNIXドメインソケットでは、アドレス・名前空間としてファイルシステムを使用する。
import socket import os PATH = '/tmp/sample.sock' BUFFER_SIZE = 1024 s = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM) os.unlink(PATH) s.bind(PATH) s.listen(1) conn, addr = s.accept() while 1: data = conn.recv(BUFFER_SIZE) if not data: break msg = data.decode('utf-8') msg = msg[::-1] conn.send(msg.encode('utf-8')) conn.close()
unix_client.py
import socket PATH = '/tmp/sample.sock' BUFFER_SIZE = 1024 s = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM) s.connect(PATH) msg = "ABCDEFG" s.send(msg.encode('utf-8')) data = s.recv(BUFFER_SIZE) print (data.decode('utf-8')) s.close()
プロセスIDからUNIXドメインソケットを調べる。
$ ps -ef | grep python 501 11543 2011 0 12:02AM ttys000 0:00.04 python unix_server.py $ lsof -n -P -U | grep 11543 python3.5 11543 kenjih 3u unix 0xf279496017547fcb 0t0 /tmp/sample.sock
0 件のコメント:
コメントを投稿