前台
<script type="text/javascript">
$(document).ready(function () {
let namespace = "/chat"
let socket = io.connect(location.protocol + '//' + document.domain + ':' + location.port + namespace);
console.log(location.protocol + '//' + document.domain + ':' + location.port + namespace)
// 发送消息
// namespace: /chat
// event: request_for_response
socket.emit('request_for_response', '{"name":"steven","age":23}');
// 监听回复的消息
// namespace: /chat
// event: response
socket.on('response', function (data) {
if (data.code === '200') {
console.log(data.msg)
} else {
alert('ERROR:' + data.msg);
socket.disconnect()
}
});
});
</script>
后台
# 当client连接成功自动回调到这里
# namespace: /chat
# event: connect
@sktio.on('connect', namespace='/chat')
def test_connect():
print('Client connected')
# 当client断开连接自动回调到这里
# namespace: /chat
# event: disconnect
@sktio.on('disconnected', namespace='/chat')
def test_disconnected():
print('Client disconnected')
# 接收前台发来的常规消息
# namespace: /chat
# event: request_for_response
@sktio.on('request_for_response',namespace='/chat')
def give_response(data):
# data为client发过来的数据
app.logger.debug(data)
try:
app.logger.debug(data.get("name"))
except:
app.logger.error("err")
time.sleep(1)
# 调用emit方法向前台发送消息,默认是由哪个namespace发来就往哪个namespace发送
flask_socketio.emit('response',{'code':'200','msg':'start to process...'})
time.sleep(4)
flask_socketio.emit('response',{'code':'200','msg':'processed'})
广播
# 当一个消息在广播选项被开启的情况下被发出的时候,连接到这个命名空间的所有客户端都会收到这个消息
# 当然如果客户端没有针对该event处理,那就和没有收到一样了
flask_socketio.emit('response', {'code': '200', 'msg': 'processed'}, broadcast=True)
房间
$(document).ready(function () {
let namespace = "/chat"
let socket = io.connect(location.protocol + '//' + document.domain + ':' + location.port + namespace);
// 前台给后台发送消息
socket.emit('request_join', {"username": randomString(8), "room": "EvenClass"});
// 前台监听后台发来的消息
socket.on('response_join', function (data) {
});
socket.on('response_leave', function (data) {
});
});
# 前台发来进入/退出的消息,后台通知房间内的所有clients(包括发来消息的人)
@sktio.on('request_join', namespace="/chat")
def on_join(data):
username = data['username']
room = data['room']
flask_socketio.join_room(room)
flask_socketio.emit("join", {'code': '200', 'msg': username + ' has entered the room.'}, room=room)
@sktio.on('request_leave', namespace="/chat")
def on_leave(data):
username = data['username']
room = data['room']
flask_socketio.leave_room(room)
flask_socketio.emit("leave", {'code': '200', 'msg': username + ' has left the room.'}, room=room)