Redis
 sql >> Cơ Sở Dữ Liệu >  >> NoSQL >> Redis

Làm thế nào để thực hiện đẩy máy chủ trong khung Flask?

Hãy xem Sự kiện do máy chủ gửi. Sự kiện do máy chủ gửi là API trình duyệt cho phép bạn tiếp tục mở một ổ cắm cho máy chủ của mình, đăng ký vào dòng cập nhật. Để biết thêm thông tin, hãy đọc Alex MacCaw (Tác giả củaJuggernaut) đăng bài về lý do tại sao anh ta giết juggernaut và tại sao Sự kiện do máy chủ gửi đơn giản hơn trong các trường hợp man rợ là công cụ tốt hơn cho công việc so với Websockets.

Giao thức thực sự dễ dàng. Chỉ cần thêm mimetype text/event-stream cho phản hồi của bạn. Trình duyệt sẽ giữ kết nối mở và lắng nghe các bản cập nhật. Sự kiện từ máy chủ là một dòng văn bản bắt đầu bằng data: và một dòng mới sau đây.

data: this is a simple message
<blank line>

Nếu bạn muốn trao đổi dữ liệu có cấu trúc, chỉ cần kết xuất dữ liệu của bạn dưới dạng json và gửi json qua dây.

Một lợi thế là bạn có thể sử dụng SSE trong Flask mà không cần thêm một Máy chủ phụ. Có một ví dụ ứng dụng trò chuyện đơn giản trên github sử dụng redis như một pub / sub backend.

def event_stream():
    pubsub = red.pubsub()
    pubsub.subscribe('chat')
    for message in pubsub.listen():
        print message
        yield 'data: %s\n\n' % message['data']


@app.route('/post', methods=['POST'])
def post():
    message = flask.request.form['message']
    user = flask.session.get('user', 'anonymous')
    now = datetime.datetime.now().replace(microsecond=0).time()
    red.publish('chat', u'[%s] %s: %s' % (now.isoformat(), user, message))


@app.route('/stream')
def stream():
    return flask.Response(event_stream(),
                          mimetype="text/event-stream")

Bạn không cần sử dụng gunicron để chạy ứng dụng ví dụ. Chỉ cần đảm bảo sử dụng phân luồng khi chạy ứng dụng, vì nếu không, kết nối SSE sẽ chặn máy chủ phát triển của bạn:

if __name__ == '__main__':
    app.debug = True
    app.run(threaded=True)

Ở phía máy khách, bạn chỉ cần một hàm xử lý Javascript sẽ được gọi khi một tin nhắn mới được đẩy từ máy chủ.

var source = new EventSource('/stream');
source.onmessage = function (event) {
     alert(event.data);
};

Sự kiện do máy chủ gửi được hỗ trợ bởi các trình duyệt Firefox, Chrome và Safari gần đây. Internet Explorer chưa hỗ trợ Sự kiện do máy chủ gửi, nhưng dự kiến ​​sẽ hỗ trợ chúng trong Phiên bản 10. Có hai Polyfills được khuyến nghị để hỗ trợ các trình duyệt cũ hơn

  • EventSource.js
  • jquery.eventsource


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Đặt phiên mùa xuân trên máy chủ redis

  2. Giao dịch Redis &Tập lệnh Lua dài hạn

  3. spring-redis không thể kết nối với máy chủ từ xa

  4. Thêm ngày hết hạn vào Redis Cache

  5. So sánh hiệu suất của việc sử dụng hàm băm Redis so với nhiều khóa