Socket.IO框架

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要求客户端与服务器端均须使用该框架。

    注意:
    解释:Socket.IO拥有众多语言支持的Web即时通讯应用的框架。
    需要注意的几个问题:
        1.Socket.IO 不等价于 WebSocket, 并不是简单的对WebSocke进行了封装。
        2.如果选择了Socket.IO框架,前后端都要使用。不能单方使用。
        3.Socket.IO框架是基于事件处理的。
    
  2. 安装
    pip install python-socketio
    
  3. 创建服务器
    • 方式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

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

        import eventlet
        eventlet.monkey_patch()
      
        import socketio
        import eventlet.wsgi
      
        sio = socketio.Server(async_mode='eventlet')  # 指明在evenlet模式下
        app = socketio.Middleware(sio)
        eventlet.wsgi.server(eventlet.listen(('', 8000)), app)
      

      在这里插入图片描述

    说明
    方式1: 使用多进程多线程模式的WSGI服务器对接
    	缺点: 一个进程或者一个线程维护一个客户端连接,太耗服务器资源。效率低,并发低。
    方式2: 作为Flask、Django 应用中的一部分
    	缺点: 跟方式1一样会遇到同样的问题
    方式3: 使用协程的方式运行 (推荐)
    	优点: 可以提升即时通信服务器的性能。
    备注:
    	1.协程看上去也是子程序,但执行过程中,在子程序内部可中断,然后转而执行别的子程序,在适当的时候再返回来接着执行。
    	2.协程执行效率高。因为子程序切换不是线程切换,而是由程序自身控制ÿ
  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值