美文网首页
2018-09-05:Python flask-sockets

2018-09-05:Python flask-sockets

作者: linyk3 | 来源:发表于2018-09-05 23:57 被阅读0次

    今天来学习使用Python中的 flask 和 flask_sockets 来搭建一个简单的Server-Client 服务。

    Server 端

    首先是Flask-Sockets 官网,还有 Github
    官方对Flask-Sockets 的介绍十分简单:
    Project description
    Elegant WebSockets for your Flask apps.
    Flask-Sockets是Flask框架的一个扩展,通过它,Flask应用程序可以优雅地使用WebSocket服务。
    注意:Flask-SocketsFlask-SocketIO是两个不同的Flask扩展库
    Flask-Sockets 仅仅将WebSocket协议进行包装,只能使用WebSocket服务;
    Flask-SocketIO 不仅包装了WebSocket协议,很可以实现其他更多的功能。

    开始运行程序前,需要安装Python的两个库: flaskflask-sockets
    安装命令:
    pip install flask

    image.png

    pip install flask-sockets

    image.png

    然后按照github上面的demo就可以创建一个server了:

    from flask import Flask
    from flask_sockets import Sockets
    
    
    app = Flask(__name__)
    sockets = Sockets(app)
    
    
    # socket 路由,访问url是: ws://localhost:5000/echo
    @sockets.route('/echo')
    def echo_socket(ws):
        while not ws.closed:
            message = ws.receive()
            ws.send("come from web server: " + str(message))
    
    # http 路由,访问url是: http://localhost:5000/
    @app.route('/')
    def hello():
        return 'Hello World!'
    
    
    if __name__ == "__main__":
        from gevent import pywsgi
        from geventwebsocket.handler import WebSocketHandler
        server = pywsgi.WSGIServer(('', 5000), app, handler_class=WebSocketHandler)
        print("web server start ... ")
        server.serve_forever()
    
    
    if __name__ == "__main__":
        from gevent import pywsgi
        from geventwebsocket.handler import WebSocketHandler
        server = pywsgi.WSGIServer(('', 5000), app, handler_class=WebSocketHandler)
        print("web server start ... ")
        server.serve_forever()
    

    执行这个python程序就可以启动server了


    image.png

    在浏览器输入:http://localhost:5000/ 就可以访问 根路由 "/" 了,返回的消息是'Hello World!'

    image.png

    这样就可以验证Server端正常运行了。

    Client 端

    Client 端 通过 websocket-client 这个库也可以非常简单的实现

    from websocket import create_connection
    # 通过socket路由访问
    ws = create_connection("ws://localhost:5000/echo")
    ws.send("Hello, linyk3")
    result = ws.recv()
    print(result)
    ws.close()
    

    上面代码中import的是 webcket, 但是在pip安装Python库的时候,如果是安装 websocket,会提示报错:

    image.png image.png

    实际上需要安装的是 websocket-client

    image.png image.png

    当Server端正常运行是,实现Client程序,通过结果可以知道Server-Client两端的交互是通的:


    image.png

    相关文章

      网友评论

          本文标题:2018-09-05:Python flask-sockets

          本文链接:https://www.haomeiwen.com/subject/tlftgftx.html