websocket可以实现双向通信,不用像http依赖客户端请求服务端,只要客户端和服务端建立连接,客户端就可以给服务端发送信息且不用等待服务端响应;服务端也可以主动向客户端推送信息。

服务端

import eventlet
import socketio

sio = socketio.Server()
app = socketio.WSGIApp(sio)


@sio.event
def connect(sid, environ):
    print(f'connect: {sid}')
    if isinstance(environ, dict):
        print('===client information===')
        [print(f'{k}: {v}') for k, v in environ.items()]
        print('======')
    sio.emit('client', {'response': 'connect success'})


@sio.on('server')
def message(sid, data):
    print(f'sid: {sid}---serve received a message! {data}')
    sio.emit('client', {'response': 'connect success'})


@sio.event
def disconnect(sid):
    print('disconnect ', sid)


eventlet.wsgi.server(eventlet.listen(('', 5000)), app)

客户端

import time

import socketio

num = 1

sio = socketio.Client()


@sio.on('client')
def on_message(data):
    global num
    print(f'第{num}次发送')
    num += 1
    time.sleep(1)
    print('client received a message!', data)
    sio.emit('server', {'message': 'who are you', 'session_id': ''})


@sio.event
def connect_error(info):
    print(f"The connection failed: {info}")


@sio.event
def disconnect():
    print('disconnected from server')


sio.connect('http://localhost:5000')

websocket的接口实现有两种形式,使用两种修饰器

  • sio.event
  • sio.io(‘’)
@sio.event
def fun()pass

@sio.io('fun')
def fun1():
    pass

上述两种实现是相同的,都可以通过sio.emit(‘fun’, {})调用

在这里插入图片描述

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐