在网络编程中,client和server会使用xx_socketio,必须要注意的一点就是sockio所使用的协议必须匹配

报错

  1. [warnning]The client is using an unsupported version of the Socket.IO or Engine.IO protocols (further occurrences of this error will be logged with level INFO) #1432

所使用协议与常见socketio版本的对比

JavaScript Socket.IO version Socket.IO protocol revision Engine.IO protocol revision python-socketio version
0.9.x 1, 2 1, 2 Not supported
1.x and 2.x 3, 4 3 4.x
3.x 5 4 5.x

image.png

常见socketio
socket、socketio、flask-socketio、WebSocket的区别与联系

  • socket 是通信的基础,并不是一个协议,Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口。在设计模式中,Socket其实就是一个门面模式,它把复杂的TCP/IP协议族和UDP协议族隐藏在Socket接口后面,对用户来说,一组简单的接口就是全部,让Socket去组织数据,以符合指定的协议。
  • WebSocket 是html5新增加的一种通信协议,可以类比于http协议。常见的应用方式如弹幕、web在线游戏。
  • socketio 是基于socket连接后(并没有自己实现socket的链接而是复用了web框架或gevent、eventlet中的socket)对网络输入输出流的处理,封装了send、emit、namespace、asyncio 、订阅等接口,同时扩展使用了redis、rabbitmq消息队列的方式与其他进程通信。
  • flask-socketio 是socketio对flask的适配,封装了emit、send和关于room的操作。
    select的链接、发送等底层操作还是在flask中做的,socketio对其做了抽象。使用threading模式时并没有自己实现socket的链接而是复用了web框架的socket,也可以指定使用gevent和eventlet中的select多路复用已提高性能。

    socketIO_client

    image.png

    websocket-client

    image.png

    python-socketio

    image.png

    Flask-socketIO

    image.png

    Flask

    image.png