做了一年的 Python 职业码农,平常只是做做 web api 之类的东西,近期有时间准备从头了解一下 python 的模块,既然是 web ,就先从 socket 看起,一方面让我想到大学里面学过的网络七层框架(想想就头疼)。照着网上的 demo 写了实现 TCP 和 UDP 的 client 和 server 模式。
每次新认知一样事物都是要和之前学过的东西联系起来,所以就有一些疑惑:
感谢分享,提前谢了!
1
binux 2016-03-18 18:49:18 +08:00
web api 不是 socket 的应用了吗? web 职业码农连本都忘了吗?
|
3
clino 2016-03-18 19:30:57 +08:00 via Android
buildbot 是用 twisted 开发的 我用的很多
不过 twisted 的异步开发方式个人很讨厌 |
5
clino 2016-03-18 20:20:17 +08:00 3
@fujian twisted 是事件驱动的网络异步编程框架,要写很多 callback,可维护性可读性不好,还是用 gevent 这种协程类的异步编程框架比较好,gevent 中文教程: http://xlambda.com/gevent-tutorial/
不过 twisted 的功能非常全和强大: http://twistedmatrix.com/documents/current/api/moduleIndex.html 而 gevent 主要是异步编程方面的库,覆盖的范围没有那么多: http://twistedmatrix.com/documents/current/api/moduleIndex.html |
6
cc7756789 2016-03-18 20:46:06 +08:00
flask 和 webpy 都是基于标准库 SimpleServer -> BaseHTTPServer -> SocketServer 的吧, SocketServer 就是基于 socket 的, socket 基于_socket ,再下面应该就是 CPython 的实现了,调用的肯定是 C 库。 Socket 这种东西,底层还是基于 TCP/IP 协议,往往是最恶心的,协议我是看不下去的。
|
7
guyskk 2016-03-18 21:11:32 +08:00
1. 写过一个批量扫描 ip 的,发现学校许多奇奇怪怪的网站。用 urllib 之类的实现会很慢, socket 效率高。
2. shadowsocks 值得研究一下,重点是事件循环( eventloop , tornado 里面叫 ioloop )和网络协议, socket 本身不难。 |
9
clino 2016-03-19 13:29:52 +08:00
上面 gevent 链接贴错成 twisted 的了: http://www.gevent.org/reference.html
|
11
billlee 2016-03-20 21:42:44 +08:00
@cc7756789 Flask 是基于 wsgiref 的,那个 http server 只是方便调试用的工具。当用 uwsgi 等方式运行运行时就是通过 WSGI 调用的,和标准库里的 http server 一点关系都没有。
|