2

これは少し厄介な新しい質問であると確信していますが、これが以前に対処されている場合はお知らせください. 私もウェブソケットを始めたばかりです。私は socket.io と通常の websockets の違いを知っています。前者を使用して jpeg データをストリーミングしようとしましたが、それはタスクに対応していませんでした (30 fps を探していますが、接続を 1 分未満維持した後に大きなラグ スパイクが発生する可能性があります)。それをさらに進めます。 https://github.com/socketio/socket.io/issues/1175

https://github.com/TwilioDevEd/mediastreams-consume-websockets-flask/blob/master/app.pyは、flask-sockets バックエンドとhttps://medium.com/@ssaurel/learn-のセットアップ方法を教えてくれました。 to-use-websockets-on-android-with-okhttp-ba5f00aea988さんにokhttp3を教えてもらいました。また、私が okhttp3 を使用する唯一の理由は、私がそれを知っているためであり、websocket はクライアント/サーバーでそのまま使用できると想定していましたが、そうではありませんでした。

これは、okhttp3 クライアントの onFailure リスナーの出力です。

failed to connect: Failed to connect /localip:5000

サーバー側では、接続が行われていないことを報告できます。

これがバックエンドの私のコードです(websocketを介してjpegフレームを送信することを意図しているため、カメラオブジェクト)

HTTP_SERVER_PORT = 5000
camera = Camera(app, './get.py', 960, 720)
socket = SocketLocal(app, camera)
thread = None

@sockets.route('/data')
def echo(ws):
    app.logger.info("Connected accepted")
    has_seen_media = False
    #send through to client
    while not ws.closed:
        gevent.sleep(0.1)
        try:
            data = gevent.with_timeout(0.1, ws.receive, timeout_value="")
            if data is None:
                raise Exception("socket closed")
        except:
            break
        message = ws.receive()
        if message is None:
            app.logger.info("No message received...")
            continue

        data = loads("message")
        if data['event'] == "connected":
            app.logger.info("Connected Message Received: {}".format(message))
        if data['event'] == "start":
            app.logger.info("Start Message received: {}".format(message))
        if data['event'] == "media":
            global socket
            global thread

            socket.ws = ws
            thread = threading.Thread(target=socket._camerathread)
            thread.start()
        if data['event'] == 'closed':
            app.logger.info("Closed Message received: {}".format(message))
            break

    thread = None
    app.logger.info("Connection closed")

if __name__== "__main__":
    #app.run(host='0.0.0.0', threaded=True)
    config['thermal']['url'] = url_for('video_feed')
    from gevent import pywsgi
    from geventwebsocket.handler import WebSocketHandler

    server = pywsgi.WSGIServer(('', HTTP_SERVER_PORT), app, handler_class=WebSocketHandler)
    server.serve_forever()

ガンコーンを介してフラスコのバックエンドを実行しています。私が使用するコマンドは、flask-sockets ページからそのままです。

gunicorn -k flask_sockets.worker --access-logfile gunicorn_access.log --error-logfile gunicorn_error.log --log-level=debug wsgi:application

これを行うためのより良い方法があれば、私はすべて耳にします。

4

0 に答える 0