一、聊天服务实现
在toutiao-backend/im目录中创建server.py
import socketio
# 创建sio对象
sio = socketio.Server(async_mode='eventlet')
app = socketio.Middleware(sio)
在toutiao-backend/im目录中创建im服务启动程序main.py
运行方式python main.py
[端口],如python main.py 8000
import eventlet
eventlet.monkey_patch()
import eventlet.wsgi
import sys
# 通过sys模块 获取启动命令中的参数 sys.argv
# # python main.py 8001 ...
# sys.argv -> ['main.py', '8001', ...]
# 获取命令行参数,目的是想让im服务运行的端口在启动程序时指定
if len(sys.argv) < 2:
# 表示启动时忘了传递端口号参数
print('Usage: python main.py [port]')
exit(1) # 表示程序异常退出
port = int(sys.argv[1])
# 通过导入事件处理模块的方法,让主程序知道事件处理方法的存在
from server import app
import notify
# socketio服务器运行的地址
SERVER_ADDRESS = ('', port)
# 创建协程服务器 并启动
# SERVER_ADDRESS = ('', 8000)
# 需求 想要将端口不写死在程序代码中,想要在启动的时候执行端口号
# python server.py [port]
# python server.py 8001
# 启动socketio服务器
sock = eventlet.listen(SERVER_ADDRESS)
eventlet.wsgi.server(sock, app)
在toutiao-backend/im目录中创建chat.py
from server import sio
import time
# 跟客户端的约定,
# 对于聊天场景,通讯时使用message事件
# 在聊天的通讯中,传输的聊天数据约定格式
# {
# "msg": "",
# "timestamp": 发送或接受消息的时间戳
# }
@sio.on('connect')
def on_connect(sid, environ):
"""
与客户端建立好连接后被执行
"""
print('sid={}'.format(sid))
print(