一、装饰器 event和on
事件处理功能的装饰器,是用来让server端和client端识别event事件的,换句话就是如果你在一个函数体前面用了装饰器,那么server端就会一直监听websocket消息,匹配client发送的event事件,如果名称一直,那么就调用server上定义的方法进行处理。个人推荐使用@sio.event装饰器,因为这种写法比较符合大部分人的阅读代码的习惯,而且server的代码和功能看着比较清晰明了。
函数体: |
event(* args,** kwargs ) |
功能: |
事件处理功能装饰器,添加了之后就代表这是用来处理socketio事件,函数名称就是event事件名称。 |
用法: |
@sio.event
def my_event(data):
print(‘Received data: ‘, data) |
函数体: |
on(event,handler = None,namespace = None ) |
功能: |
事件处理功能装饰器,添加了之后就代表这是用来处理socketio事件 |
参数说明: |
-
-
- event –事件名称。它可以是任何字符串。事件名称’connect’,’message’并且’disconnect’被保留,不应使用。
- handler –处理事件时应调用的函数。如果未提供此参数,则该方法充当处理程序函数的装饰器。
- namespace –事件的Socket.IO名称空间。如果省略此参数,则处理程序与默认名称空间关联。
来自 <https://python-socketio.readthedocs.io/en/stable/api.html#server-class> |
用法: |
# as a decorator:
@socket_io.on(‘connect’, namespace=’/chat’)
def connect_handler(sid, environ):
print(‘Connection request’)
if environ[‘REMOTE_ADDR’] in blacklisted:
return False # reject# as a method:
def message_handler(sid, msg):
print(‘Received message: ‘, msg)
eio.send(sid, ‘response’)
socket_io.on(‘message’, namespace=’/chat’, message_handler)
来自 <https://python-socketio.readthedocs.io/en/stable/api.html#server-class> |
二、服务开启Server
socketio服务器有两种类型,一种是同步的,一种是异步的。具体使用哪一种是根据你使用的http server框架强相关的,换句话就是如果你使用的是异步的
函数体:
|
socketio.Server(client_manager = None,logger = False,binary = False,json = None,async_handlers = True,always_connect = False,** kwargs )
|
功能:
|
后台开启Socketio服务器,支持websocket和长轮询传输两种方式。
|
参数介绍
|
-
-
- client_manager –将管理客户端列表的客户端管理器实例。如果省略此选项,客户端列表将存储在内存结构中,但是这样就没办法使用多个连接的服务器。
- logger –启用设置为日志记录True或传递给它使用的logger对象。要禁用日志记录,请设置为False。默认值为 False。
- binary – True支持二进制传输数据,False将所有数据视为文本进行传输。在Python 2里,如果它被设置为True, unicode值被视为文本,str和 bytes值将被视为二进制文件。这个参数在python3是无效的
- json –用于编码和解码数据包的替代json模块。自定义json模块必须具有dumps与loads 标准库版本兼容的和函数。
- async_handlers –如果设置为True,则客户端的事件处理程序将在单独的线程中执行。要为客户端同步运行处理程序,请设置为False。默认值为True。
- always_connect –设置为时False,直到连接处理程序返回除以外的其他值时False,才建议建立新连接,此时新连接将被接受。设置为时True,将立即接受连接,然后如果连接处理程序返回False断开连接,则发出连接。设置为True如果您需要从连接处理程序发出事件,并且客户端在接受连接之前收到事件时感到困惑。在其他情况下,请使用默认值False。
- kwargs –基础Engine.IO服务器的连接参数。
- async_mode –要使用的异步模型。有关可用选项的说明,请参阅文档中的“部署”部分。有效的异步模式是“thread”,“evenlet”,“ gevent”和“ gevent_uwsgi”。如果未提供此参数,则首先尝试“ eventlet”,然后尝试“ gevent_uwsgi”,然后尝试“ gevent”,最后尝试“thread”。然后,安装了所有依赖项的第一个异步模式将被选择。
- ping_timeout –客户端在断开连接之前等待服务器响应的时间(以秒为单位)。默认值为60秒。
- ping_interval –客户端ping服务器的间隔(以秒为单位)。默认值为25秒。
- max_http_buffer_size –使用轮询传输时消息的最大大小。默认值为100,000,000字节。
- allow_upgrades –是否允许传输升级。默认值为True。
- http_compression –使用轮询传输时是否压缩软件包。默认值为True。
- compression_threshold –仅在消息的字节大小大于此值时压缩消息。默认值为1024字节。
- cookie –包含客户端会话ID的HTTP cookie的名称。如果设置为None,则不会将cookie发送给客户端。默认值为‘io’。
- cors_allowed_origins –源或允许连接到此服务器的源列表。默认情况下,仅允许相同的来源。将此参数设置 ‘*’为允许所有起源,或[]禁用CORS处理。
- cors_credentials –在对此服务器的请求中是否允许使用凭据(cookie,身份验证)。默认值为 True。
- monitor_clients –如果设置为True,则后台任务将确保关闭不活动的客户端。设置为False禁用监视任务(不建议)。默认值为True。
- engineio_logger –将Engine.IO日志记录设置为True或传递使用的记录器对象。要禁用日志记录,请设置为 False。默认值为False。
来自 <https://python-socketio.readthedocs.io/en/stable/api.html#server-class>
|
函数体
|
socketio.AsyncServer(client_manager = None,logger = False,json = None,async_handlers = True,** kwargs
|
功能:
|
后台开启异步Socketio服务器,支持websocket和长轮询传输两种方式。
|
参数介绍
|
-
-
- client_manager –将管理客户端列表的客户端管理器实例。如果省略此选项,则客户端列表将以内存结构存储,因此无法使用多个连接的服务器。
- logger –启用设置为日志记录True或传递给它使用的logger对象。要禁用日志记录,请设置为False。请注意,即使logger是,也会记录致命错误False。
- json –用于编码和解码数据包的替代json模块。自定义json模块必须具有dumps与loads 标准库版本兼容的和函数。
- async_handlers –如果设置为True,则事件处理程序在单独的线程中执行。要同步运行处理程序,请设置为False。默认值为True。
- kwargs –基础Engine.IO服务器的连接参数。
来自 <https://python-socketio.readthedocs.io/en/latest/api.html#asyncserver-class>
|
三、message事件和自定义事件
server跟client进行通信都是根据event事件来进行交互的,有两种方式,一种是系统内置的message事件,一种是emit自定义事件。看函数体也可以看出send是没有event参数的,因为他发送的event名称就是message。
函数体:
|
send(data, to=None, room=None, skip_sid=None, namespace=None, callback=None, **kwargs)
|
功能:
|
发送特定的message事件。区别emit(),emit()是发送自定义消息的。参数都是相同的
|
参数说明:
|
-
-
- data –要发送到一个或多个客户端的数据。数据可以是类型的str,bytes,list或dict。如果为 list或dict,则数据将序列化为JSON。
- to –邮件的收件人。可以将其设置为客户端的会话ID以仅寻址该客户端,或者设置为应用程序创建的任何自定义会议室,以寻址该会议室中的所有客户端。如果省略此参数,则将事件广播到所有连接的客户端。
- room – to参数的别名。
- skip_sid –广播到房间或所有客户端时要跳过的客户端会话ID。这可用于防止将消息发送给发件人。要跳过多个sid,请传递一个列表。
- namespace –事件的Socket.IO名称空间。如果省略此参数,则事件将发送到默认名称空间。
- callback –如果给定,将调用此函数以确认客户端已接收到消息。传递给函数的参数是客户端提供的参数。回调功能只能在寻址单个客户端时使用。
- ignore_queue –仅在配置消息队列时使用。如果设置为True,则事件直接发送给客户端,而无需通过队列。这效率更高,但仅在使用单个服务器进程时有效。建议始终将此参数的默认值设置为False
来自 <https://python-socketio.readthedocs.io/en/stable/api.html#server-class>
|
函数体:
|
emit(event,data = None,to = None,room = None,skip_sid = None,namespace = None,callback = None,** kwargs )
|
功能:
|
可以向一个或者多个客户端发送自定义事件,属于服务器主动想客户端发送内容
|
参数说明:
|
-
-
- event –事件名称。它可以是任何字符串。事件名称‘connect’,‘message’并且‘disconnect’被保留,不应使用。
- data –要发送到一个或多个客户端的数据。数据可以是类型的str,bytes,list或dict。如果为 list或dict,则数据将序列化为JSON。
- to –消息收件人。可以将其设置为客户端的会话ID以仅寻址该客户端,或者设置为应用程序创建的任何自定义会议室,以寻址该会议室中的所有客户端。如果省略此参数,则将事件广播到所有连接的客户端。
- room – to参数的别名。
- skip_sid –广播到房间或所有客户端时要跳过的客户端会话ID。这可用于防止将消息发送给发件人。要跳过多个sid,请传递一个列表。
- namespace –event的Socket.IO名称空间。如果省略此参数,则事件将发送到默认名称空间。
- callback –如果给定,将调用此函数以确认客户端已接收到消息。传递给函数的参数是客户端提供的参数。回调功能只能在寻址单个客户端时使用。
- ignore_queue –仅在配置消息队列时使用。如果设置为True,则事件直接发送给客户端,而无需通过队列。这效率更高,但仅在使用单个服务器进程时有效。建议始终将此参数的默认值设置为False。
来自 <https://python-socketio.readthedocs.io/en/stable/api.html#server-class>
|