Socketio即时通讯

  1. Socket.IO

Socket.IO

pip install python-socketio

以协程方式运行服务端(推荐):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
import eventlet
eventlet.monkey_patch()
import socketio
import eventlet.wsgi
sio = socketio.Server(async_mode='eventlet') # 创建socket对象,并指定以协程方式运行
app = socketio.Middleware(sio) # 使用sio创建符合WSGI协议的app对象
@sio.on('监听事件名')
有两个特殊事件:
connect(两个参数(sid,environ)):建立连接立即执行,并比其他事件多接收一个参数environ(握手数据)。
disconnect(一个参数(sid)):断开连接立即执行。普通事件可以接收两个参数(sid,data(用户发过来是消息))

def on_函数名(参数):
sio.emit('事件名', 要发送的数据) #群发
sio.send(要发送的数据,skip_sid=sid) #跳过sid进行群发
sio.emit('事件名', 要发送的数据,room=room_name) # 只给roon_name房间里的人发送消息
sio.enter_room(sid,房间名) #把sid加入带房间,每次连接时会默认执行一句sio.enter_room(sid,sid)
如果是message消息,可以直接使用sio.send(data, room=room_name)

socket = eventlet.listen(('IP', 端口(整数))) #创建socket对象
eventlet.wsgi.server(socket, app) # 以协程的方式启动服务器

web可调用的socketio:

1
2
mgr = socketio.KombuManager('列队URL')  #创建列队对象
sio = socketio.Server(async_mode='eventlet',client_manager=mgr) # 创建socket对象,并指定以协程方式运行

视图调用

1
2
app.mgr = socketio.KombuManager('列队URL')
current_app.mgr.emit('事件名', 要发送的数据, room=room_name)

转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 zoubinbf@163.com

×

喜欢就点赞,疼爱就打赏