Socket.IO
1简介
Socket.IO 本是一个面向实时 web 应用的 JavaScript 库,现在已成为拥有众多语言支持的Web即时通讯应用的框架。
Socket.IO 主要使用WebSocket协议。但是如果需要的话,Socket.io可以回退到几种其它方法,例如Adobe Flash Sockets,JSONP拉取,或是传统的AJAX拉取,并且在同时提供完全相同的接口。尽管它可以被用作WebSocket的包装库,它还是提供了许多其它功能,比如广播至多个套接字,存储与不同客户有关的数据,和异步IO操作。
Socket.IO 不等价于 WebSocket,WebSocket只是Socket.IO实现即时通讯的其中一种技术依赖,而且Socket.IO还在实现WebSocket协议时做了一些调整。
优点:
Socket.IO 会自动选择合适双向通信协议,仅仅需要程序员对套接字的概念有所了解。
有Python库的实现,可以在Python实现的Web应用中去实现IM后台服务。
缺点:
Socket.io并不是一个基本的、独立的、能够回退到其它实时协议的WebSocket库,它实际上是一个依赖于其它实时传输协议的自定义实时传输协议的实现。该协议的协商部分使得支持标准WebSocket的客户端不能直接连接到Socket.io服务器,并且支持Socket.io的客户端也不能与非Socket.io框架的WebSocket或Comet服务器通信。因而,Socket.io要求客户端与服务器端均须使用该框架。
2Python服务器端开发
文档 https://python-socketio.readthedocs.io/en/latest/server.html
- 安装
pip install python-socketio
- 创建服务器
- 方式1
使用多进程多线程模式的WSGI服务器对接(如uWSGI、gunicorn)
import socketio
# create a Socket.IO servers
sio = socketio.Server()
# 打包成WSGI应用,可以使用WSGI服务器托管运行
app = socketio.WSGIApp(sio) # Flask Django
创建好app对象后,使用uWSGI、或gunicorn服务器运行此对象。
- 方式2
作为Flask、Django 应用中的一部分
from wsgi import app # a Flask, Django, etc. application
import socketio
# create a Socket.IO server
sio = socketio.Server()
app = socketio.WSGIApp(sio, app)
创建好app对象后,使用uWSGI、或gunicorn服务器运行此对象。
- 方式3
使用协程的方式运行 (推荐)
说明
因为服务器与客户端进行即时通信时,会尽可能的使用长连接,所以若服务器采用多进程或多线程方式运行,受限于服务器能创建的进程或线程数,能够支持的并发连接客户端不会很高,也就是服务器性能有限。采用协程方式运行服务器,可以提升即时通信服务器的性能。
# 协程: 微线程, 可以在一个线程中切换多个任务
#