即时通讯之Socket.IO协程解决方案(eventlet)

本文介绍了Socket.IO作为Web即时通讯框架的原理和特点,强调了其自动选择通信协议的优势。重点讲解了Python服务器端开发,推荐使用协程方式以提高性能,并详细阐述了事件处理机制。同时,提到了Python客户端的测试方法。
摘要由CSDN通过智能技术生成

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

使用协程的方式运行 (推荐)

说明

因为服务器与客户端进行即时通信时,会尽可能的使用长连接,所以若服务器采用多进程或多线程方式运行,受限于服务器能创建的进程或线程数,能够支持的并发连接客户端不会很高,也就是服务器性能有限。采用协程方式运行服务器,可以提升即时通信服务器的性能。

# 协程: 微线程, 可以在一个线程中切换多个任务
#
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值