标签: flask-socketio

Systemd:启动操作超时。终止

我正在尝试为我的 python-flask-socketio 服务器创建一个自动启动服务。

我需要通过 systemd 启动一个 python 脚本。这是我的服务代码:

[Unit]
Description=AppName


[Service]
Type=forking
ExecStart=/usr/bin/python3 /opt/myapp/app.py

[Install]
WantedBy=multi-user.target
Run Code Online (Sandbox Code Playgroud)

如果我尝试使用手动启动它sudo service myservice start- 它工作得很好。它停止了我的终端\ssh 窗口,但我可以关闭它并且它按预期工作。

但是当我重新启动我的电脑时,它没有启动。当systemctl status myservice我检查它的状态时,我得到以下信息:

systemd[1]: Starting My Service...
systemd[1]: myserivce.service: Start operation timed out. Terminating.
systemd[1]: Failed to start My Service.
systemd[1]: myserivce.service: Unit entered failed state.
systemd[1]: myserivce.service: Failed with result 'timeout'.
Run Code Online (Sandbox Code Playgroud)

我在这里做错了什么?

python ubuntu flask systemd flask-socketio

9
推荐指数
2
解决办法
1万
查看次数

不可恢复的错误:ResponseError('UNBLOCKED 强制解除阻塞操作的阻塞,实例状态已更改(主 -> 副本?)

我正在使用一个 redis docker 容器在我的 python 应用程序中用作 celery 和 flaskk-socketio 的消息/代理队列,最近我的 redis 实例经常崩溃,而且它没有回来。

我不是 redis 专家,我还没有找到问题所在,这是日志,感谢您的帮助!

谢谢

[2019-08-09 03:44:29,930: CRITICAL/MainProcess] Unrecoverable error: ResponseError('UNBLOCKED force unblock from blocking operation, instance state changed (master -> replica?)',)
Traceback (most recent call last):
  File "/server/env/lib/python3.6/site-packages/celery/worker/worker.py", line 205, in start
    self.blueprint.start(self)
  File "/server/env/lib/python3.6/site-packages/celery/bootsteps.py", line 119, in start
    step.start(parent)
  File "/server/env/lib/python3.6/site-packages/celery/bootsteps.py", line 369, in start
    return self.obj.start()
  File "/server/env/lib/python3.6/site-packages/celery/worker/consumer/consumer.py", line 322, in start
    blueprint.start(self)
  File "/server/env/lib/python3.6/site-packages/celery/bootsteps.py", line 119, in start
    step.start(parent)
  File "/server/env/lib/python3.6/site-packages/celery/worker/consumer/consumer.py", line 598, in start …
Run Code Online (Sandbox Code Playgroud)

redis flask socket.io flask-socketio

9
推荐指数
1
解决办法
1852
查看次数

Flask-SocketIO 的首选生产设置是什么?对 Gunicorn 感到困惑,因为它只能由一名工人产生

从文档的部署部分来看,Gunicorn 只能与 Flask-SocketIO 一起使用 1 个工作进程。我想知道部署 Flask-socket-io 服务器的首选方式是什么?目前,我有一个常规 Flask 应用程序,它使用从 nginx 代理传递到的多工作机 Gunicorn 服务器。虽然我没有任何负载平衡,但我希望多个 Gunicorn 工作人员能够处理并发性,而这不会让我对 websockets 服务器有一点担心。

也许我误解了 eventlet/greenlets 的功能,但我认为 uwsgi 是我尚未探索的唯一其他选择。为此目的值得进入 uwsgi 的学习曲线吗?

flask python-3.x gunicorn flask-socketio

9
推荐指数
1
解决办法
6155
查看次数

Flask、FlaskSocketIO - RuntimeError:无法从 WSGI 环境获取套接字

当我尝试在应用程序中使用使用 websockets 的功能时,我在控制台中收到此错误:

File "/Users/user/venv/lib/python3.7/site-packages/simple_websocket/ws.py", line 138, in __init__
    raise RuntimeError('Cannot obtain socket from WSGI environment.')
RuntimeError: Cannot obtain socket from WSGI environment.
Run Code Online (Sandbox Code Playgroud)

我还在浏览器控制台中收到此错误: WebSocket connection to 'ws://localhost:5000/socket.io/?EIO=4&transport=websocket&sid=40NYzDgGYStMR0CEAAAJ' failed:

我尝试使用 gevent、gevent-websocket 和 eventlet,但这会产生其他问题,并且我不确定是否需要在该用例中使用 gevent 或 eventlet。

这是其余的相关代码:

__初始化__.py

from flask_socketio import SocketIO
...

socketio = SocketIO()

def create_app(config_class=Config):
    app = Flask(__name__)
    app.config.from_object(Config)

    socketio.init_app(app, cors_allowed_origins='*')

    ...

    return app
Run Code Online (Sandbox Code Playgroud)

应用程序.py

from app import create_app, socketio

app = create_app()

if __name__ == '__main__':
    socketio.run(app)
Run Code Online (Sandbox Code Playgroud)

routes.py 这只接受 POST 请求,因为我从 Celery 任务将数据发送到此路由

from …
Run Code Online (Sandbox Code Playgroud)

python websocket flask flask-socketio

9
推荐指数
1
解决办法
3392
查看次数

Flask SocketIO从服务器向房间发送消息

在我app,我需要client加入一个,room以便它可以receive从我的消息server.

服务器代码

@socketio.on('join', namespace='/test')
def join(message):

    join_room(message['room'])
    room = message['room']
    emit('my response', {'data': 'Entered the room ' + message['room']}, room=room)


@app.route('/scan/user/<int:user_id>/venue/<int:venue_id>', methods = ['POST'])
@auth.login_required
def scan_tablet_user_func(user_id, venue_id):

    room = 'venue_' + str(venue_id)
    socketio.emit('my response', {'data': json.dumps(my_info, ensure_ascii=False)}, room=room)
Run Code Online (Sandbox Code Playgroud)

客户代码

$('form#join').submit(function(event) {
            socket.emit('join', {room: $('#join_room').val()});
            return false;
        });
Run Code Online (Sandbox Code Playgroud)

一旦webpage加载,我就进入"venue_1"webpage form标题"join".

variable roomserver侧也被设置为"venue_1".

问题是,当我打电话给我时,我身上API /scan/user/...什么都没有 …

python flask flask-socketio

8
推荐指数
1
解决办法
3412
查看次数

Flask 套接字 IO 从另一个模块发出

我几乎阅读了互联网上可用的每篇文章,但似乎对我的情况没有任何作用。我已经安装了 Flask-socketio 并且一切正常,直到我从 app.py 以外的模块发出消息。

我尝试了几种方法来实现这一点,并且我还通过使用 Redis 阅读了有关它的文档,但它对我也不起作用。这是我拥有的代码片段。

应用程序

from flask import Flask
from flask import request
from flask_socketio import send, SocketIO, emit, join_room

app = Flask(__name__)

# This is to stop force sorting in response, by default jsonify sorts the response keys alphabetically
app.config["JSON_SORT_KEYS"] = False

socketio = SocketIO(app, cors_allowed_origins="*")

@socketio.on('join')
def client_join_room(data):
    print(type(data))
    room = data['room']
    join_room(room)
    send('you have entered the room.', room=room)


@app.route('/msg')
def send_message():
    socketio.emit("message", "Server message", room='my_room')
    return "I got you."



if __name__ == '__main__': …
Run Code Online (Sandbox Code Playgroud)

python flask socket.io flask-socketio

8
推荐指数
1
解决办法
3651
查看次数

Socket.io 与flask-socketio python。如何设置套接字保持活动/超时

我正在努力寻找有关 socket.io 超时值的任何文档。我在客户端使用 //cdnjs.cloudflare.com/ajax/libs/socket.io/0.9.16/socket.io.min.js 在服务器端使用 Flask-SocketIO。

这是我创建套接字的方式:

namespace = '/coregrapher'

var socket = io.connect('http://' + document.domain + ':' + location.port + namespace);

socket.on('connect', function() {
    socket.emit('my event', {data: 'I\'m connected!'});
});

socket.on('my response', function(msg) {
    $('#result').append(msg.data);
});
Run Code Online (Sandbox Code Playgroud)

问题是,如果服务器甚至一分钟都没有向客户端或 Visaversa 发送任何内容,则客户端会断开连接,如果服务器尝试向客户端再次发送,则会失败,因为客户端已经断开连接。如何让客户端保持连接?

谢谢!

python websocket socket.io flask-socketio

7
推荐指数
1
解决办法
9432
查看次数

RuntimeError:在请求上下文之外工作

我正在尝试创建一个'keepalive'websocket线程,一旦有人连接到页面但每10秒发送一次,就会发出一个错误但是不确定如何绕过它.知道如何使这项工作.一旦'断开'被发送,我将如何杀死这个线程?

谢谢!

@socketio.on('connect', namespace='/endpoint')
def test_connect():
    emit('my response', {'data': '<br>Client thinks i\'m connected'})

    def background_thread():
        """Example of how to send server generated events to clients."""
        count = 0
        while True:
            time.sleep(10)
            count += 1
            emit('my response', {'data': 'websocket is keeping alive'}, namespace='/endpoint')

    global thread
    if thread is None:
        thread = Thread(target=background_thread)
        thread.start()
Run Code Online (Sandbox Code Playgroud)

python websocket flask flask-socketio

7
推荐指数
1
解决办法
6428
查看次数

在两个 Flask 服务器之间共享会话

我有一个带有两个 Flask 服务器的后端。一种是处理所有 RESTfull 请求,另一种是 Flask-socketio 服务器。有没有办法在这两个应用程序之间共享会话变量(登录用户等)?如果这很重要的话,它们确实会在不同的端口上运行。

我如何理解它们在客户端会话 cookie 上工作的会话,所以这两个服务器不应该都有权访问该信息吗?如果是的话怎么办?如果没有,有没有办法达到同样的效果?

python session flask socket.io flask-socketio

7
推荐指数
1
解决办法
3627
查看次数

使用 Docker 时套接字 IO 响应缓慢

我有一个内置在 Flask 中的 Web 应用程序,可以在其中捕获推文(使用 Tweepy 库)并显示在前端。我使用 Socket IO 在前端实时显示推文。

当我在本地运行它时,我的代码工作正常。推文立即出现。

但是,当我对 Web 应用程序进行 Docker 化时,前端不会立即更新。显示更改需要一些时间(有时我认为由于缓慢而丢失了推文)

以下是我网站的代码摘录:

fortsocket.js

$(document).ready(function () {



/************************************/
  /*********** My Functions ***********/
  /************************************/
  function stream_active_setup() {
    $("#favicon").attr("href", "/static/icons/fortnite-active.png");
    $("#stream-status-ic").attr("src", "/static/icons/stream-active.png");
    $("#stream-status-text").text("Live stream active");
  }

  function stream_inactive_setup() {
    $("#favicon").attr("href", "/static/icons/fortnite-inactive.png");
    $("#stream-status-ic").attr("src", "/static/icons/stream-inactive.png");
    $("#stream-status-text").text("Live stream inactive");
  }



  /*********************************/
  /*********** My Events ***********/
  /*********************************/

  // Socket connection to server

  // Prometheus
  //var socket = io.connect('http://104.131.173.145:8083');

  // Local
  var socket = io.connect(window.location.protocol + '//' + document.domain + ':' + location.port); …
Run Code Online (Sandbox Code Playgroud)

python flask socket.io docker flask-socketio

6
推荐指数
1
解决办法
411
查看次数