长轮询聊天服务器

时间:2013-05-27 04:11:54

标签: python chat long-polling

我需要一些关于我写的聊天服务器中的一些小问题的帮助。如您所见,我使用全局变量“chat”来存储新提交的消息。这是因为我找不到MongoDB的工作pubsub模块(或者我只是不知道如何使用它)。因此,当2个人几乎在同一时间发送消息时,只输出较新的消息。这是我目前的代码:

#!/usr/bin/env python

import gevent
import gevent.monkey; gevent.monkey.patch_all()
from gevent.event import Event
from gevent.pywsgi import WSGIServer

from flask import Flask, request, Response, render_template, jsonify

import time

from pymongo import MongoClient

app = Flask(__name__)
app.config['DEBUG'] = True

a = Event()
chat = {}

def logchat(data):
    client = MongoClient()
    db = client.chatlog
    db.bences.insert(data)

@app.route('/output')
def sse_request():
    a.wait()
    return jsonify(chat)

@app.route('/processchat', methods=['POST'])
def processchat():
    global chat
    ms = int(round(time.time() * 1000))
    chat = {'name': request.form['chatname'], 'msg': request.form['chatmsg'], 'ts': ms}
    a.set(); a.clear()
    logchat(chat)
    return jsonify(success=True)

@app.route('/')
def page():
    return render_template('chat.html')

if __name__ == '__main__':
    http_server = WSGIServer(('0.0.0.0', 80), app)
    http_server.serve_forever()

你能建议我做什么?非常感谢!

0 个答案:

没有答案