美文网首页
websocket实现手机上传图片到电脑

websocket实现手机上传图片到电脑

作者: fly_tomato | 来源:发表于2020-06-09 10:26 被阅读0次

    WebSocket是一种网络通信协议,可以实现服务端与客户端的双向通信
    它的最大特点就是,服务器可以主动向客户端推送信息,客户端也可以主动向服务器发送信息。

    HTTP协议的话,只能由客户端发起通信,如果要获取服务端数据变化,只能通过“轮询”实现:每过一段时间发起一个询问,轮询的效率低,浪费资源,因为必须不停建立连接,或者保持HTTP 长连接。

    服务端的实现方式有多种,本文用Flask-websocket实现。
    下面贴上服务端代码:

    import json
    
    from flask import Flask, request, jsonify
    from gevent.pywsgi import WSGIServer
    from geventwebsocket.handler import WebSocketHandler
    from geventwebsocket.exceptions import WebSocketError
    
    
    app = Flask(__name__)
    
    SOCKET_DIC = {}
    
    # 接收请求参数sign,用来区分不同客户端请求
    @app.route('/ws/file/<sign>')
    def ws_socket(sign):
        ws = request.environ.get('wsgi.websocket')
        if not ws:
            return '请求方式错误!'
       
        while True:
            msg = ws.receive()
            if not msg:
                ws.close()
                try:
                    SOCKET_DIC.pop(sign)
                except Exception as e:
                    pass
                break
    
            msg = eval(msg)
    
            if isinstance(msg, list):
                ws_dic = {
                    sign: ws
                }
                # 保存请求方信息,实现类似群聊功能
                SOCKET_DIC.update(ws_dic)
            else:
                client = SOCKET_DIC.get(sign)
                if not client:
                    ws.close()
                try:
                    client.send(json.dumps(msg))
                    ws.send(json.dumps(msg))
                except WebSocketError as e:
                    pass
                SOCKET_DIC.pop(sign)
    
        return 'success'
    
    
    if __name__ == '__main__':
        http_server = WSGIServer(('0.0.0.0', 5000), app, handler_class=WebSocketHandler)
        http_server.serve_forever()
    
    

    客户端新建一个WebSoket实例:

    var ws = new WebSocket('ws://ip:port/ws/file/{sign}');
    
    然后可以调用实例的各种方法属性,来监听、接收、发送消息等。

    电脑和手机均与服务端建立起通信,服务端将手机端上传的图片转发给电脑端,就实现了简单的手机上传图片到电脑。依据这个思想,我们可以实现更多的功能。

    相关文章

      网友评论

          本文标题:websocket实现手机上传图片到电脑

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