web-dev-qa-db-ja.com

RShinyアプリで複数のユーザーを同時に処理する

ユーザーが特定のアクションボタン(actionButton())を押した回数を追跡するシンプルな光沢のあるアプリがあり、この合計は他の情報とともにユーザーに報告されます。

これで、Shiny Rがアプリごとに1つのRセッションを作成することがわかりました。したがって、複数のユーザーが同じアプリに同時にアクセスしている場合、それらはすべて同じRセッションで作業しています。したがって、報告されたユーザーXのアクションボタンの押下数は、現在のRセッション中にアプリにアクセスしたすべてのユーザーのアクションボタンの押下の合計になります。

単一のRセッション内でアプリの仮想インスタンスを作成するという意味で、ユーザーを分離したままにしておきたいと思います。

関数shinyserver()session引数で実行すると、セッションオブジェクトが作成され、クライアントのコンピューターに関する情報がsession$clientdataに格納されることを理解しています。

このオブジェクトのコンテンツを活用して、任意の時点でアプリにアクセスしているさまざまなユーザーのステータスを追跡するファイルを設定および管理するための既知の方法はありますか?

17
Homer White

私はあなたが間違っていると思います。シャイニーは、デフォルトで、シャイニーアプリごとに1つのプロセスを作成しますが、無制限の数のセッション(つまり、「ユーザー接続」)を単一のアプリ/プロセスで。

スコープの詳細については、チュートリアルのこの章を確認してください: http://rstudio.github.io/shiny/tutorial/#scoping

基本的に、shinyServer()式の内部で定義されたものはすべて、単一のユーザーのセッションに対してプライベートになります。 shinySeverの外に置いた変数は、すべてのユーザー間でグローバルに共有されます。したがって、セッション間で変数を共有したくない場合は、変数(クリックのカウンターなど)をshinyServer()内に保持できます。

25
Jeff Allen