【技术栈——00059】socketio服务器和flask对接,完成服务器推送_

Docker步步实践

目录文档:

①Docker简介

②基本概念

③安装Docker

④使用镜像:

⑤操作容器:

⑥访问仓库:

⑦数据管理:

⑧使用网络:

⑨高级网络配置:

⑩安全:

⑪底层实现:

⑫其他项目:

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

    'msg': 'hello',
    'timestamp': round(time.time()*1000)
}
sio.emit('message', msg_data, room=sid)

@sio.on(‘message’)
def on_message(sid, data):
“”"
接收message事件消息时执行
“”"
print(‘sid={} data={}’.format(sid, data))
msg_data = {
‘msg’: ‘I have received your msg: {}’.format(data),
‘timestamp’: round(time.time()*1000)
}
sio.send(msg_data, room=sid)
# sio.emit(‘message’, msg_data, room=sid)


## main文件内容



import sys

sys.path.insert(0, “/home/tanzhihao/test_3dview_remote/im”)

sys.path.insert(0, “/home/tanzhihao/test_3dview_remote/utils”)

sys.path.append(‘/home/tanzhihao/test_3dview_remote/utils’)

import os, sys
sys.path.append(os.path.dirname(os.path.abspath(‘/home/tanzhihao/test_3dview_remote/utils’)))

import eventlet
eventlet.monkey_patch()

import socketio

import eventlet.wsgi
import sys
from server import app

获取命令行参数,目的是想让im服务运行的端口在启动程序时指定

if len(sys.argv) < 2:
print(‘Usage: python main.py [port]’)
exit(1)

port = int(sys.argv[1])

chat

import chat
import notify

socketio服务器运行的地址

SERVER_ADDRESS = (‘’, port)

启动socketio服务器

sock = eventlet.listen(SERVER_ADDRESS)
eventlet.wsgi.server(sock, app)


## notify文件内容



from server import sio

from werkzeug.wrappers import Request
from utils.jwt_util import verify_jwt

def check_jwt_token(token):
“”"
检验jwt token
:param token:
:return:
“”"

payload = verify_jwt(token)
if payload is None:
    return None
else:
    return payload.get('user_id')

@sio.on(‘connect’)
def on_connect_notify(sid, environ):
“”"
当客户连接时被执行
@param sid:
@param environ: dict 解析客户端握手的http数据
“”"
print(“打印environ的数据:”.format(environ))
# 借助werkzeug提供的Request类,将environ字典转换为我们熟悉的request对象,从对象中读取属性的方式来获取客户端的请求信息
request = Request(environ) # 等价于flask 的request对象

# 从查询字符串中取出jwt token
tokenData = request.args.get('token')

# 验证jwt token
# 如果有效 取出了user_id 将用户添加到user_id的房间
user_id = check_jwt_token(tokenData)
print(type(user_id))
print("拿到了token值:{}".format(user_id))
if user_id is not None:
    sio.enter_room(sid, str(user_id))

    # sio.emit('message', {'data': '你已经成功连接'}, room=sid)

@sio.on(‘message’)
def on_message(sid, data):
“”"
接收message事件消息时执行
“”"
msg_data = data
sio.send(msg_data, room=sid)

@sio.on(‘disconnect’)
def on_disconnect(sid):
“”"
当用户断开连接时被执行
:param sid:
:return:
“”"
# 将用户从专属vip包房剔除
rooms = sio.rooms(sid)

for room in rooms:
    sio.leave_room(sid, room)

## server文件内容



import socketio

config_engine = {

‘AMQP_URI’: “pyamqp://admin:admin@10.84.62.199/my_vhost”

}

RABBITMQ = ‘amqp://python:rabbitmqpwd@localhost:5672/toutiao’

RABBITMQ = ‘amqp://admin:admin@localhost:5672/vhost01’

#创建rabbitmq消息队列的管理对象
mgr = socketio.KombuManager(RABBITMQ)

创建sio对象

sio = socketio.Server(cors_allowed_origins=“*”,
client_manager=mgr,
async_mode=‘eventlet’)

app对象交给eventlet携程服务器使用对接

app = socketio.Middleware(sio)


## flask初始化app时的设置




# 最后

各位读者,由于本篇幅度过长,为了避免影响阅读体验,下面我就大概概括了整理了

![](https://img-blog.csdnimg.cn/img_convert/862287df6cd3b1b63f55a30623bed85c.webp?x-oss-process=image/format,png)

![](https://img-blog.csdnimg.cn/img_convert/9ac6d2fa50967073740d2376f0de5475.webp?x-oss-process=image/format,png)

![](https://img-blog.csdnimg.cn/img_convert/8516ce5b290c24bce82b0db21f3cd54e.webp?x-oss-process=image/format,png)

![](https://img-blog.csdnimg.cn/img_convert/c383419c3867133321675b9ad0b03dc9.webp?x-oss-process=image/format,png)

> **本文已被[CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】](https://bbs.csdn.net/forums/4f45ff00ff254613a03fab5e56a57acb)收录**

**[需要这份系统化的资料的朋友,可以点击这里获取](https://bbs.csdn.net/forums/4f45ff00ff254613a03fab5e56a57acb)**

Ra5B-1715484394806)]

> **本文已被[CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】](https://bbs.csdn.net/forums/4f45ff00ff254613a03fab5e56a57acb)收录**

**[需要这份系统化的资料的朋友,可以点击这里获取](https://bbs.csdn.net/forums/4f45ff00ff254613a03fab5e56a57acb)**

  • 13
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值