1

Google Apps スクリプトとスプレッドシートをストレージとして使用して Web アプリを開発しています。

基本的に、さまざまなタブのいくつかの表を示す HTML です。

私のアプリから、ユーザーは新しいタスクを追加したり、タスクを編集したり、タスクを完了としてマークしたりできます。多くのユーザーがアプリを使用しているため、各クライアントに表示されるデータはすぐに古くなります。

新しいレコードと既存のレコードへの変更をできるだけ早くアプリに更新したいと思います。

最後の編集タブ + 行をセルに記録し、サーバーからそのデータを 1 分ごとに取得することを考えましたが、その 1 分間に多くのエントリが追加/編集された場合はどうなるでしょうか?

WebSocket は無理だと思います。他のアイデアはありますか?

私はJQueryクライアント側を使用しています。

4

3 に答える 3

1

ポーリング以外の方法はありません。HTML サービスからのソケットまたはコールバックを使用することはできません。頻繁にポーリングすることもできますが、クォータが不足する可能性があります。本当にポーリングしてクォータを回避したい場合は、公開された公開スプレッドシートの最後の編集をログに記録し、クライアントから ajax を使用して読み取ることができますが、公開されたスプレッドシートは毎分しか更新されません。

于 2013-11-06T17:29:34.567 に答える
0

次のようなことを試すことができます:

var lock = LockService.getPublicLock();
var success = lock.tryLock(10000);
if (success) {
// check your spreadsheet for lastUpdated or PropertiesService.getScriptProperties();
}
} else {
// do something else (try it again or error msg)
}
lock.releaseLock(); 

私のアプリではうまく機能し、約 1000 人のユーザーがいます。

于 2014-03-19T02:47:02.553 に答える
0

競合を避けるために、すべてのタスクに一意の ID を付与してください。作成時間 + ランダムな文字列のようなもの。そうすれば、スプレッドシートで調べることができます。また、ロック サービスを使用すると、競合を回避するために一時的に同時編集を防止できると思います: https://developers.google.com/apps-script/reference/lock/

更新を確認するには、スプレッドシートの最終編集時刻をポーリングしてみてください。前回のポーリングよりも大きい場合は、更新をフェッチします。 https://developers.google.com/apps-script/reference/drive/file#getLastUpdated()

于 2013-11-08T14:28:30.103 に答える