埋头工作
专职养娃

Python-socketio介绍02(Server端)

一、装饰器 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.Serverclient_manager = Nonelogger = Falsebinary = Falsejson = Noneasync_handlers = Truealways_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模块必须具有dumpsloads 标准库版本兼容的和函数。
      • 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 –包含客户端会话IDHTTP 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.AsyncServerclient_manager = Nonelogger = Falsejson = Noneasync_handlers = True** kwargs 

功能:

后台开启异步Socketio服务器,支持websocket和长轮询传输两种方式。

参数介绍

      • client_manager –将管理客户端列表的客户端管理器实例。如果省略此选项,则客户端列表将以内存结构存储,因此无法使用多个连接的服务器。
      • logger –启用设置为日志记录True或传递给它使用的logger对象。要禁用日志记录,请设置为False。请注意,即使logger是,也会记录致命错误False
      • json –用于编码和解码数据包的替代json模块。自定义json模块必须具有dumpsloads 标准库版本兼容的和函数。
      • 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 –要发送到一个或多个客户端的数据。数据可以是类型的strbyteslistdict。如果为 listdict,则数据将序列化为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>

函数体:

emitevent,data = None,to = None,room = None,skip_sid = None,namespace = None,callback = None,** kwargs )

功能:

可以向一个或者多个客户端发送自定义事件,属于服务器主动想客户端发送内容

参数说明:

      • event –事件名称。它可以是任何字符串。事件名称‘connect’‘message’并且‘disconnect’被保留,不应使用。
      • data –要发送到一个或多个客户端的数据。数据可以是类型的strbyteslistdict。如果为 listdict,则数据将序列化为JSON
      • to –消息收件人。可以将其设置为客户端的会话ID以仅寻址该客户端,或者设置为应用程序创建的任何自定义会议室,以寻址该会议室中的所有客户端。如果省略此参数,则将事件广播到所有连接的客户端。
      • room – to参数的别名。
      • skip_sid –广播到房间或所有客户端时要跳过的客户端会话ID。这可用于防止将消息发送给发件人。要跳过多个sid,请传递一个列表。
      • namespace –eventSocket.IO名称空间。如果省略此参数,则事件将发送到默认名称空间。
      • callback –如果给定,将调用此函数以确认客户端已接收到消息。传递给函数的参数是客户端提供的参数。回调功能只能在寻址单个客户端时使用。
      • ignore_queue –仅在配置消息队列时使用。如果设置为True,则事件直接发送给客户端,而无需通过队列。这效率更高,但仅在使用单个服务器进程时有效。建议始终将此参数的默认值设置为False

来自 <https://python-socketio.readthedocs.io/en/stable/api.html#server-class>

赞(0) 打赏
本人经小丙张嘎纯手工打字生成,未经许可不得转载知识点滴:小丙张嘎blog » Python-socketio介绍02(Server端)
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏