初步学习了 python 的 Socket 模块,有一些疑惑请大家指教

2016-03-18 18:41:43 +08:00
 fujian

做了一年的 Python 职业码农,平常只是做做 web api 之类的东西,近期有时间准备从头了解一下 python 的模块,既然是 web ,就先从 socket 看起,一方面让我想到大学里面学过的网络七层框架(想想就头疼)。照着网上的 demo 写了实现 TCP 和 UDP 的 client 和 server 模式。

每次新认知一样事物都是要和之前学过的东西联系起来,所以就有一些疑惑:

  1. 有经验的同学通过 socket 做过什么比较有趣的东西?现在的感觉就是在理论级别认知和理解,感觉无法联系到应用啊。
  2. 貌似基于 socket 有一个框架叫 Twisted ,因为本人在生产级别接触 django , flask 这样的框架,所以很好奇有同学在生产级别用过 Twisted 吗?都是在解决什么问题?

感谢分享,提前谢了!

3029 次点击
所在节点    Python
11 条回复
binux
2016-03-18 18:49:18 +08:00
web api 不是 socket 的应用了吗? web 职业码农连本都忘了吗?
fujian
2016-03-18 19:30:12 +08:00
@binux 哈哈,确实是!
clino
2016-03-18 19:30:57 +08:00
buildbot 是用 twisted 开发的 我用的很多
不过 twisted 的异步开发方式个人很讨厌
fujian
2016-03-18 19:58:53 +08:00
@clino 是因为设计模式吗?
clino
2016-03-18 20:20:17 +08:00
@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
cc7756789
2016-03-18 20:46:06 +08:00
flask 和 webpy 都是基于标准库 SimpleServer -> BaseHTTPServer -> SocketServer 的吧, SocketServer 就是基于 socket 的, socket 基于_socket ,再下面应该就是 CPython 的实现了,调用的肯定是 C 库。 Socket 这种东西,底层还是基于 TCP/IP 协议,往往是最恶心的,协议我是看不下去的。
guyskk
2016-03-18 21:11:32 +08:00
1. 写过一个批量扫描 ip 的,发现学校许多奇奇怪怪的网站。用 urllib 之类的实现会很慢, socket 效率高。
2. shadowsocks 值得研究一下,重点是事件循环( eventloop , tornado 里面叫 ioloop )和网络协议, socket 本身不难。
billlee
2016-03-18 22:19:47 +08:00
@cc7756789 Flask 是基于 WSGI 的
clino
2016-03-19 13:29:52 +08:00
上面 gevent 链接贴错成 twisted 的了: http://www.gevent.org/reference.html
cc7756789
2016-03-20 14:37:50 +08:00
@billlee WSGI 只是一种协议,一种标准,而不是某个库
billlee
2016-03-20 21:42:44 +08:00
@cc7756789 Flask 是基于 wsgiref 的,那个 http server 只是方便调试用的工具。当用 uwsgi 等方式运行运行时就是通过 WSGI 调用的,和标准库里的 http server 一点关系都没有。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/264556

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX