When it’s ready.

出来るまで出来ない

タリーサーバーを作る その1

Twisted を使ってみたい だたそれだけナノかも知れないが、シカゴまで来てノーアウトプットは情けないのでやってみる事にする。まぁ、完成しなくても、作成過程で得られる知識を重要とする。

希望する挙動

  1. あるPCから、データを受信する。
  2. データを加工する。
  3. 他のPC(複数)にデータを送信する。

そんなソフトを作ってみようと思う。

疑問点
  • 特定ポートの監視ってどうするの?
  • 受信待ちを軽くするには?(ブロックしそう)
  • 受信後にファンクションに渡すには?

送信部分を作る。

とりあえづ、非同期とか、twistedとか置いといてそもそも通信出来るかというレベルからコツコツとやっていく。

import socket

SERVER = 'localhost'
PORT = 5123

IPF = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

def ipf_conn():
    IPF.connect((SERVER, PORT))

def send_data(command):
    IPF.send(command +';')


ipf_conn()
for i in range(100):
   send_data('print ";-D%s"' % i)
IPF.close()

なぜか

if __name__ = "__main__":

を書いたら動かなかったのでメソッド直書きにした。
Brainstormで無事にデータを受け取れてるみたいなのでこれでOK

Twistedのドキュメントをあさる

ここが総本山みたいで、結構きれいなサイトになっている。
ドキュメントは、ここに、たくさん上がっている。
そもそも、twistedとはpythonで書かれているフレームワークで様々なサービスを利用提供するのに使う事が出来る。
ココに、全体として何ができるかみたいなのが図で説明されている(が、理解はしてない)
上記表を眺めていると左側のTwisted.Applicationと図面真ん中上のTwisted.internetを言う物を利用すると今回の目的が達成出来るような気がする。ソースもみたいのでインストールする事にする。

日本語ですばらしいページを見つけた>ココ

  • 非同期で動かすには、deferredという仕組みを使う(理解)する必要がありそう。
Twisted のインストール
% sudo easy_install twisted
ざっくり
Using /Library/Python/2.5/site-packages
Processing dependencies for twisted
Finished processing dependencies for twisted
% python
Python 2.5.1 (r251:54863, Jan 17 2008, 19:35:17) 
[GCC 4.0.1 (Apple Inc. build 5465)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import twisted.application
>>> import twisted.internet
>>> a = twisted.application
>>> a
<module 'twisted.application' from '/Library/Python/2.5/site-packages/twisted/application/__init__.pyc'>
>>> i = twisted.internet
>>> i
<module 'twisted.internet' from '/Library/Python/2.5/site-packages/twisted/internet/__init__.pyc'>
>>> help(a)

>>> help(i)

OKOK ヘルプも無事にでたし、成功成功。

TCPの受信に挑戦

とりあえづ、ここまで