很想知道 Python 有没有类似 PHP 的 workerman 的库

2019-01-30 06:17:41 +08:00
 smallgoogle

最近一直在写 python 方面的东西,一直都在 websocket 通讯上卡住;

我很想知道 python 有没有好像 php 的 workerman 的库,可以直接使用 websocket,然后写业务逻辑就好了;

我现在是 flask + flask_socketio,可是碰到很尴尬的事情,发现 SocketIO 在前端好像是轮询方式一样,不停的在请求;

其实我只是想要一个长连接而已;

其次是发现我用 flask + flask_socketio 构架,web 也是他,socket 也是他,到底我怎么在 web 的后端业务逻辑里面去使用 socket 给用户主动推送消息呢?比如 php 的 websocket 里 GatewayClient 一样,只要直接调用就可以后端给前端发消息了;

这简直是我最大的挣扎点,各位前辈请轻拍,各种文档资料 github 案例都给我吧,我不怕麻烦,不嫌弃案例多;
只要能帮助到,我愿意一个个的看,一个个的深究; 感谢。。。。。

3620 次点击
所在节点    Python
14 条回复
PulpFunction
2019-01-30 06:49:52 +08:00
李辉大佬肯定会 这么早就写代码了???
est
2019-01-30 08:10:04 +08:00
py 有 gunicorn worker,php 有 fpmworker

都是多进程在服务器跑。那么问题来了,你如何判断客户长连接连上哪个进程的?

我好奇 woekeeman 如何解决这个问题的?
Trim21
2019-01-30 08:10:37 +08:00
用过 aiohttp 里面的 socketio,应该是差不多的用法吧(

在 flask 的路由函数里跟 background thread 函数里面一样,直接 emit 出去不可以吗?
ratazzi
2019-01-30 08:19:44 +08:00
socketio 支持几种模式,轮询是其中一种,要看是什么原因导致没用 websocket
rogwan
2019-01-30 08:28:31 +08:00
@smallgoogle
直接用 Flask-Sockets 就可以,前端基本上都直接支持 websocket 了

cc @est
没法知道是哪个进程连上的吧,还有多终端连接的问题,这个要实现,要么要加上用户系统来判断,新建一个 ws 断开老的 ws,否则很难准确判断。
vZexc0m
2019-01-30 16:33:38 +08:00
以前用 tornado 写过相关的代码,具体识别用户连接的方法是客户端建立 websocket 连接的时候在 URL 上带上登录凭证,然后服务端将用户和 websocket 连接对应起来,如果要向某个用户主动推送消息,只需要找到用户的 websocket 连接进行发送消息即可。
smallgoogle
2019-01-31 03:00:52 +08:00
@est workerman 有一个唯一客户端 ID 作为标识。
est
2019-01-31 08:06:01 +08:00
@smallgoogle 所以其实楼主代码里没看到相关逻辑。
769932247
2019-02-13 14:12:02 +08:00
楼主还在做么,我最近也在写,遇到一些问题
lsls931011
2019-02-14 17:40:34 +08:00
像我们 php 程序员是使用 swoole 的,哈哈
lakechan96
2019-02-17 16:56:47 +08:00
@smallgoogle SocketIO 有 sid 做唯一 ID

当发送到名称为 sid 的 room 时等同于发送给指定用户

但是在 @socketio.* 的 context 之外,你需要自己自己维护 sid 来调用 emit 发送,在 context 之内可以直接使用 request.sid
smallgoogle
2019-02-18 01:57:42 +08:00
@769932247 什么问题?
shange123
2019-02-19 10:52:36 +08:00
使用 tornado 啊,自带 websocket
miao666
2019-08-12 04:12:33 +08:00
@est workerman 应该是单进程,多线程的

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

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

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

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

© 2021 V2EX