背景
一开始肯定是用socket.io, client端肯定没啥问题,但是,到了server端怎么都不行
一,Flask-SocketIO
失败, 有没有大神指导一下为啥失败
pip install Flask-SocketIO
from flask import Flask, render_template
from flask_socketio import SocketIO, emit
from flask_cors import CORS
app = Flask(__name__)
app.config['SECRET_KEY'] = 'secret!'
socketio = SocketIO(app)
cors = CORS(app, resources={r"/*": {"origins": "*"}})
@app.route('/')
def index():
return render_template('index.html')
@socketio.on('connect')
def test_connect():
emit('my response', {'data': 'Connected'})
@socketio.on('message')
def handle_message(message):
print('message-->: ' + message)
if __name__ == '__main__':
socketio.run(app)
二,python-socketio
还是失败,就是跟client端连不上
pip install python-socketio
import socketio
sio = socketio.Server()
@sio.on('connect')
def on_connect(sid, environ):
print('Client connected:', sid)
@sio.on('disconnect')
def on_disconnect(sid):
print('Client disconnected:', sid)
@sio.on('message')
def on_message(sid, data):
print('Received message from', sid, ':', data)
sio.emit('response', data)
if __name__ == '__main__':
app = socketio.WSGIApp(sio)
eventlet.wsgi.server(eventlet.listen(('localhost', 8000)), app)
三,原生websocket
pip install websockets
代码是从网上找的demo,正常连接完全没问题
import asyncio
import websockets
websocket_users = set()
# 检测客户端权限,用户名密码通过才能退出循环
async def check_user_permit(websocket):
print("new websocket_users:", websocket)
websocket_users.add(websocket)
print("websocket_users list:", websocket_users)
while True:
recv_str = await websocket.recv()
cred_dict = recv_str.split(":")
if cred_dict[0] == "admin" and cred_dict[1] == "123456":
response_str = "Congratulation, you have connect with server..."
await websocket.send(response_str)
print("Password is ok...")
return True
else:
response_str = "Sorry, please input the username or password..."
print("Password is wrong...")
await websocket.send(response_str)
# 接收客户端消息并处理,这里只是简单把客户端发来的返回回去
async def recv_user_msg(websocket):
while True:
recv_text = await websocket.recv()
print("recv_text:", recv_text)
response_text = f"Server return: {recv_text}"
print("response_text:", response_text)
await websocket.send(response_text)
# 服务器端主逻辑
async def run(websocket, path):
while True:
try:
# await check_user_permit(websocket)
await recv_user_msg(websocket)
except websockets.ConnectionClosed:
print("ConnectionClosed...", path) # 链接断开
print("websocket_users old:", websocket_users)
websocket_users.remove(websocket)
print("websocket_users new:", websocket_users)
break
except websockets.InvalidState:
print("InvalidState...") # 无效状态
break
except Exception as e:
print("Exception:", e)
if __name__ == '__main__':
print("127.0.0.1:8181 websocket...")
asyncio.get_event_loop().run_until_complete(websockets.serve(run, "127.0.0.1", 8181))
asyncio.get_event_loop().run_forever()