python socket 长连接

2015-06-25 18:04:12 +08:00
 snopy

python如何实现socket的长连接呢?有谁知道么?望指点迷津

6513 次点击
所在节点    Python
14 条回复
bluehawk1030
2015-06-25 18:30:51 +08:00
推荐看看一个项目 tornadio2, 基于tornado 的 socket.io server 实现,之前的一个项目中有采纳,单机跑1k 比较轻松。
sillyousu
2015-06-25 19:15:29 +08:00
我前段时间写了个 demo 。 基于 tornado。
https://github.com/sillyousu/dummy_game/blob/master/client.py
mhycy
2015-06-25 20:09:16 +08:00
TCP Socket长连接无法保证,因为有奇葩网关会不发RST截断数据流。
对于这种已经断掉的数据流来说,底层的Socket会阻塞在read上。
(情况与断网类似,需要等待TCP超时)

具体长连接实现与应用环境有关,请提供应用场景以作判断。
一般建议手工发送keepalive数据以维持连接。
(那种奇葩网关也会忽略TCP的keepalive包,所以要手工发)
snopy
2015-06-25 22:29:34 +08:00
@bluehawk1030 @mhycy @sillyousu 感谢各位的建议,之前我找到的资料包括:
https://delog.wordpress.com/2013/08/16/handling-tcp-keepalive/
http://pythonhosted.org/pulsar/apps/socket.html
不知道你们是否了解?关键是我不知道怎么用
sillyousu
2015-06-26 00:17:21 +08:00
@snopy 你的具体问题是什么?获取描述一个用例?
pubby
2015-06-26 00:45:40 +08:00
传输流还是消息?后者直接用Web socket不是更简单吗
mhycy
2015-06-26 08:56:14 +08:00
@snopy
应用场景呢?不然我们怎么告诉你怎么用。。囧
snopy
2015-06-26 11:02:39 +08:00
@sillyousu 就是客户端向服务端发出一个请求,然后建立一个socket,且一直保持连接,以便服务端向客户端推送消息,直到客户端主动请求退出连接
snopy
2015-06-26 11:04:22 +08:00
@pubby 有相应的参考资料么?
@mhycy 问题描述见8楼,谢谢
mhycy
2015-06-26 11:13:00 +08:00
@snopy
场景是web,还是其他?
web的话不建议这么做,其他环境自行定断,原因都是防火墙/NAT截断数据流
另外你给的说明几乎是没任何帮助意义的。。
因为涉及到不同的环境不同的场景对包的处理方式有所不同。
最简单就是开个SOCKET并且设定SO_KEEPALIVE。
但对于KEEPALIVE的一些参数,如检测间隔重试次数等的设定,在win和linux是不同的。

另:这种方式在复杂的网络环境下不保证可用,但这是最简单的做法。
连接本身一直不close就是长连接了,但往细的说这是个坑,要考虑的事情还挺多的。
BeginMan
2015-06-26 13:26:42 +08:00
python socket.io
mengzhuo
2015-06-26 15:13:09 +08:00
最简单的实现:

import socket
s = socket.socket()
s.bind(("0.0.0.0",12345))
s.listen(0)
c, _ = s.accept()
while True:
print c.recv(1024)
mengzhuo
2015-06-26 15:13:58 +08:00
不过一般人都用gevent之类的async库~
yuyang
2015-06-27 20:06:06 +08:00
一般来说python就tornado和gevent两个选择, 我个人觉得gevent写起来更舒服

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

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

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

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

© 2021 V2EX