python-socket-engine
文件大小: unknow
源码售价: 5 个金币 积分规则     积分充值
资源说明:async / sync socket framework in pure python
python-socket-engine
====================

by frostyplanet at gmail.com

async / sync socket framework based on callbacks

Features
__________

* pure python, no third party cpython module is required. tested for python >= 2.3.4 

* listen multiple port for different callbacks

* with replacable backends:  select.poll, select.epoll (python2.6+) or python-epoll or pyev.

* (fix-len)read_unblock, (fix-len)write_unblock, readline_unblock, connect_unblock is implemented for aync nonblocking mode.

* threading friendly, so you can use it to create your threaded server or threaded-pool server as you want

* optional pure python coroutine support (inspired by Bluelet)

* optional timeout for nonblocking mode (in seconds)

* optional inactive connection checking (idle timeout, in seconds)

* optional new connection callback to filter out unauthorized connections

* readahead buffer using epoll edge-trigger mode

Compared to other framework
----------------------------
Before I started this project, I need to write a app to be deployed on thousands machines (running different linux distros and some without internet access),
high parallel network i/o is desired, and better be pure python to minimize deployment effort. While Gevent needs compile c extensions, and asyncore in python lib 
lacks a lot of functionality (there is no fix-len unblocking send/recv, no timeout, etc), so I decided to write it myself. It's event triggered, connect/read/write operation has ok/error callbacks. you can organize the code in closures or functions with suitable arguments.


Core components
----------------

    socket_engine.py  (framework)

	socket_engine_ssl.py (SSL support)

	socket_engine_coro.py  (coroutine suport)

    io_poll.py     (poll & epoll & pyev backends)

Extensions & Helper & misc
----------------

    async_httphandler.py  (a BaseHTTPServer.py rewrite for async mode to implement a simple http server)
    
    job_queue.py  (thread-pool job workers)

    rpc.py & rpc_server.py  (a thread-pool rpc server and client implementation using SSL)

    timecache.py  (cache to save for frequent time.time () calls )

    net_io.py (fixed length header for socket interaction, and safe recvall() & sendall() )


Testing
----------------

Onced tested and optimised in 3k+ connection with 2k+ QPS production environment. More tests will be appreciated.

See test/test_socketengine.py for functional test, and test/test_server.py for async / sync performance tests.

With sequenced 100k read & write, async model is as fast as sync model, and async model is capable of more throughput, and cpu friendly with large numbers of connectins.

localhost performance testing in test/test_server.py:
  	
testing parameters:

intel i3-2310M (HT off)

each client: 100k sequenced send & recv x 50000 round;

blocking-mode client: 4 client in 4 thread;

unblock-mode client:  4 client multiplex in 1 thread;

blocking-mode server & unblock-mode server both using 1 thread;

result:

blocking-mode client, unblock-mode server,  time: 18.5491 (v0.9), 17.9542 (v1), 17.7019 (v1.2)

blocking-mode clinet, blocking-mode server, time: 19.9843 (v0.9), 18.6820 (v1), 

blocking-mode client, coro server,			time: 				21.3861 (v1.1), 20.6825 (v1.2)

unblock-mode client, unblocking-mode server, time: 25.2030 (v0.9), 				24.4142 (v1.2)

unblock-mode client, block-mode server, 	time:  26.1123 (v0.9), 23.7259 (v1), 22.6464 (v1.2)


Examples
----------------

Async mode: private socks5 tunnel :
https://github.com/frostyplanet/transwarp


Sync mode threaded-pool:
rpc_server.py & test/test_rpc.py in this repo

本源码包内暂不包含可直接显示的源代码文件,请下载源码包。