python websocket客户端和服务端实现
websocket可以实现双向通信,不用像http依赖客户端请求服务端,只要客户端和服务端建立连接,客户端就可以给服务端发送信息且不用等待服务端响应;服务端也可以主动向客户端推送信息。
·
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’, {})调用
更多推荐
已为社区贡献2条内容
所有评论(0)