Doge log

Abby CTO 雑賀 力王のオフィシャルサイトです

socketの置き換え

置き換えをサポートした。
socketモジュールとして動作する。

from mopenio.thread import threaded
from mopenio.io import install_nio
import socket

install_nio()

@threaded
def handle_client(conn):
    data = conn.recv(8192)
    conn.send(data)
    conn.close()

sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.bind(('localhost', 6000))
sock.listen(100)

while True:
    conn, addr = sock.accept()
    handle_client(conn)

threaded部はいい案が重い浮かばなかった。
とりあえずsocketコンパチにする理由は

  1. 既存のコードをnio化する(プロトコルの再実装はめんどくさい)

だけ。
ただこれだとsocketが置き換えられっぱなしになるので

with non_bloking(True):
    #nioなsocketを使うコード
    ....

などでうまくclassbox的な感じにした方がいいかも知れないな。
withブロック間である程度ごにょれるコードが書けるようになったのでみんな2.6 に移行した方がいいと思うよ。