闪亮服务器 - 如何使用 session$onSessionEnded()
Shiny Server - how to use session$onSessionEnded()
我正在尝试跟踪用户 activity 使用我闪亮的应用程序时的情况。我在特定位置放置了函数,这些函数将行写入临时文件。我想要的是有一个在用户会话结束时调用的函数。
根据文档:
> ?session
> onSessionEnded(callback)
Registers a function to be called after the client has disconnected. Returns a function that can be called with no arguments to cancel the registration.
我试过用这个:
session$onSessionEnded(function(x){
a = read_csv(shinyActivityTmpFile_000)
write_csv(a,'C:\Users\xxxx\Desktop\test.csv')
})
但是什么也没发生。 shinyActivityTmpFile_000
是全局文件引用。当用户单击按钮并执行操作时,应用程序会以 CSV 格式写入此文件。我只是想将它从临时存储移动到永久存储。最终我想要将它写入数据库的函数,但为了测试我只是想获得一个函数,该函数将在应用程序关闭时 运行。
我在这里错过了什么?
你好,我不知道你是如何构建 shinyActivityTmpFile
文件的,但是对于使用 onSessionEnded
你可以看看这个例子,它在文件中写入应用程序启动的日期时间,当应用程序关闭时:
library("shiny")
ui <- fluidPage(
"Nothing here"
)
server <- function(input, output, session) {
# This code will be run once per user
users_data <- data.frame(START = Sys.time())
# This code will be run after the client has disconnected
session$onSessionEnded(function() {
users_data$END <- Sys.time()
# Write a file in your working directory
write.table(x = users_data, file = file.path(getwd(), "users_data.txt"),
append = TRUE, row.names = FALSE, col.names = FALSE, sep = "\t")
})
}
shinyApp(ui = ui, server = server)
如果您使用带身份验证的服务器,您可以通过以下方式检索用户名:
users_data <- data.frame(USERS = session$user, START = Sys.time())
基于@Victorp 的回答和对 session$onSessionEnded
参数的评论的回复。可以使用默认参数向函数添加参数:
server <- function(input, output, session) {
# This code will be run once per user
users_data <- data.frame(USERS = session$user, START = Sys.time())
# This code will be run after the client has disconnected
session$onSessionEnded(function(userID = users_data$USERS) {
if(userID==1){
users_data$END <- Sys.time()
# Write a file in your working directory
write.table(x = users_data, file = file.path(getwd(), "users_data.txt"),
append = TRUE, row.names = FALSE, col.names = FALSE, sep = "\t")
}
})
}
shinyApp(ui = ui, server = server)
我正在尝试跟踪用户 activity 使用我闪亮的应用程序时的情况。我在特定位置放置了函数,这些函数将行写入临时文件。我想要的是有一个在用户会话结束时调用的函数。
根据文档:
> ?session
> onSessionEnded(callback)
Registers a function to be called after the client has disconnected. Returns a function that can be called with no arguments to cancel the registration.
我试过用这个:
session$onSessionEnded(function(x){
a = read_csv(shinyActivityTmpFile_000)
write_csv(a,'C:\Users\xxxx\Desktop\test.csv')
})
但是什么也没发生。 shinyActivityTmpFile_000
是全局文件引用。当用户单击按钮并执行操作时,应用程序会以 CSV 格式写入此文件。我只是想将它从临时存储移动到永久存储。最终我想要将它写入数据库的函数,但为了测试我只是想获得一个函数,该函数将在应用程序关闭时 运行。
我在这里错过了什么?
你好,我不知道你是如何构建 shinyActivityTmpFile
文件的,但是对于使用 onSessionEnded
你可以看看这个例子,它在文件中写入应用程序启动的日期时间,当应用程序关闭时:
library("shiny")
ui <- fluidPage(
"Nothing here"
)
server <- function(input, output, session) {
# This code will be run once per user
users_data <- data.frame(START = Sys.time())
# This code will be run after the client has disconnected
session$onSessionEnded(function() {
users_data$END <- Sys.time()
# Write a file in your working directory
write.table(x = users_data, file = file.path(getwd(), "users_data.txt"),
append = TRUE, row.names = FALSE, col.names = FALSE, sep = "\t")
})
}
shinyApp(ui = ui, server = server)
如果您使用带身份验证的服务器,您可以通过以下方式检索用户名:
users_data <- data.frame(USERS = session$user, START = Sys.time())
基于@Victorp 的回答和对 session$onSessionEnded
参数的评论的回复。可以使用默认参数向函数添加参数:
server <- function(input, output, session) {
# This code will be run once per user
users_data <- data.frame(USERS = session$user, START = Sys.time())
# This code will be run after the client has disconnected
session$onSessionEnded(function(userID = users_data$USERS) {
if(userID==1){
users_data$END <- Sys.time()
# Write a file in your working directory
write.table(x = users_data, file = file.path(getwd(), "users_data.txt"),
append = TRUE, row.names = FALSE, col.names = FALSE, sep = "\t")
}
})
}
shinyApp(ui = ui, server = server)