RPCR-запросы и хранилище данных - PullRequest
0 голосов
/ 24 марта 2011

Я начинаю работать с Google App Engine. Я хочу сделать чат AJAX.

class ChatMessage(db.Model):
  message = db.StringProperty()
  created = db.DateTimeProperty(auto_now_add=True)

class RPCHandler(webapp.RequestHandler):
  ##get message every 4 seconds
  def get(self):
    que = db.Query(ChatMessage).order('-created')
    chat_list = que.fetch(limit=3)
    jencoded_chat_list = gaejsonEncoder.encode(chat_list) ##my own module
    self.response.out.write(jencoded_chat_list)

РЕЗУЛЬТАТ: сообщение3, сообщение2, сообщение1

Это то, что я намеревался.

Я хотел добавить запрос POST ajax, поэтому добавил RPCHandler2.

class RPCHandler2(webapp.RequestHandler):
  def post(self):
    msg = self.request.get('message')
    if msg == '':
        return
    newchat = ChatMessage(message=msg)
    newchat.put()

    que = db.Query(ChatMessage).order('-created')
    chat_list = que.fetch(limit=3))
    jencoded_chat_list = gaejsonEncoder.encode(chat_list)
    self.response.out.write(jencoded_chat_list)

Я пишу "POST Message!" в текстовой области и нажмите кнопку

РЕЗУЛЬТАТ: POST Message!, Message3, message2

Это то, что я хотел.

Но через 4 секунды началось «GET» и

РЕЗУЛЬТАТ: сообщение3, сообщение2, сообщение1

Почему 'GET' не может получить новое сообщение из хранилища данных?

Заранее спасибо.

1 Ответ

1 голос
/ 24 марта 2011

Если вы используете хранилище данных с высокой репликацией, вы можете столкнуться с проблемой «возможной согласованности».Реплика хранилища данных, обрабатывающая запрос на получение, возможно, еще не получила недавно отправленные данные.

Если вы поместите newchat.put() внутри транзакции, более вероятно, что будущие поступления будут согласованными.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...