2

在生产中,只要我用 javascript 打开一个频道,它就会在一秒钟后断开连接。 在 devserver 上一切正常。回调在服务器上有效,但在客户端上无效。我们正在使用flask、backbone、requirejs和sourcemap。

客户端代码:

window.channel = new goog.appengine.Channel(window.PLAY_SETTINGS.CHANNEL_TOKEN);
window.gae_websocket = window.channel.open({
  onopen: function() {
    return console.log('onopen');
  },
  onclose: function() {
    return console.log('onclose');
  },
  onerror: function() {
    return console.log('onerror');
  },
  onmessage: function() {
    return console.log('onmessage');
  }
});

服务器代码:

class Connection(ndb.Model):
    user_key = ndb.KeyProperty()
    scope = ndb.IntegerProperty(indexed=True, choices=range(0, 2))
    target_key = ndb.KeyProperty(indexed=True)  # Event ou debate
    channel_id = ndb.StringProperty(indexed=True)

    @staticmethod
    def open_channel():
        channel_id = str(uuid4())
        channel_token = channel.create_channel(client_id=channel_id, duration_minutes=480)
        return channel_token, channel_id

来自 appengine 生产控制台的日志。 来自 appengine 生产控制台的屏幕截图

客户端回调 (js) 不起作用。这些是创建日志的服务器回调:

@app.route('/_ah/channel/disconnected/', methods=['POST'])
def channel_disconnection():
    client_id = request.form.get('from')
    ndb.delete_multi(Connection.query(Connection.channel_id == client_id).fetch(keys_only=True))
    logging.info("Channel closed : %s" % client_id)
    return make_response('ok', '200')


@app.route('/_ah/channel/connected/', methods=['POST'])
def channel_connection():
    client_id = request.form.get('from')
    logging.info("Channel open : %s" % client_id)
    return make_response('ok', '200')
4

0 回答 0