def on_connect(sid, environ): """ 当客户端连接时做的事情 如果方法返回False,表示服务器拒绝客户端的socketio连接, :param environ: dict :return: """ # print('sid={}'.format(sid)) # print('environ={}'.format(environ)) timestamp = time.time() sio.emit('notify', { 'msg': 'Hello, this is notify event', 'timestamp': timestamp }) # send -> event 'message' sio.send({'msg': 'Hello, this is message event', 'timestamp': timestamp}) # 解析environ字典,取出查询字符串中传递的token request = Request(environ) token = request.args.get('token') # print('token=>{}'.format(token)) # 验证token,获取用户身份 if token: payload = verify_jwt(token, JWT_SECRET) # print('payload->{}'.format(payload)) if payload is not None: user_id = payload['user_id'] # 将用户添加到专属房间,房间编号为用户id,方便flask web那边的业务可以直接给user_id对应的房间发送消息 sio.enter_room(sid, str(user_id)) return return False
def on_connect(sid, envrion): request = Request(envrion) token = request.args.get('token') user_id = _get_user_id(token) # 用户一连接im服务器, 就让其进入自己的用户id对应的房间 room="2" print("进入房间: %s" % user_id) sio.enter_room(sid, str(user_id))
def on_connect_notify(sid, environ): """ 当客户连接时被执行 :param sid: :param environ: dict 解析客户端握手的http数据 :return: """ # 借助werkzeug提供的Request类,将environ字典转换为我们熟悉的request对象,从对象中读取属性的方式来获取客户端的请求信息 request = Request(environ) # 等价于flask 的request对象 # 从查询字符串中取出jwt token token = request.args.get('token') # 验证jwt token # 如果有效 取出了user_id 将用户添加到user_id的房间 user_id = check_jwt_token(token) if user_id is not None: sio.enter_room(sid, str(user_id))
def on_connect(sid, environ): """ 与客户端建立好连接后执行 :param sid: string sid是socketio为当前连接客户生成的识别id :param environ: dict 在连接握手数据(HTTP报文解析之后的字典) :return: """ # 前端连接socketio服务器时候,携带的的查询字符串中包含的token 是随着第一次websocket握手的http报文携带 # 可以通过environ取出 # 借助werkzeug工具集 来帮助我们解读 客户端请求http数据 request = Request(environ) # 对于接毒出来的request对象,可以像在flask中使用一样来读取数据 token = request.args.get('token') if token is not None: payload = verify_jwt(token, JWT_SECRET) if payload is not None: user_id = payload.get('user_id') # 将用户加入用户id名称的房间 sio.enter_room(sid, str(user_id))
def on_connect(sid, environ): sio.send(data='welcome', room=sid) sio.enter_room(sid, room="100") # 将该sid用户加入到房间中
def connect_handler(sid, environ): print('Connection request') sio.emit("start",data="欢迎连接",room=sid) sio.enter_room(sid,room="house")
async def start_chat(sid, message): sio.enter_room(sid, message['question_id']) await sio.emit('entered', {'success': True}, room=sid)
def on_connect(sid, envroin): """连接时触发 """ request = Request(envroin) sio.enter_room(sid)