我正在尝试构建一个可以访问用户的Google Calendar API的网络应用,而不会实际存在。因此,基本上在后台从我的服务器(PHP脚本)添加或修改其Google日历中的事件。
我已经是Google Calendar的oauth2了,我有一个刷新令牌,所以他们不必每次都重新登录。他们只是登录oauth一次,他们很好。但是我如何才能使服务器可以在后台进行更改?
我想到了。所以我所做的是将access_token
存储在数据库中并检查访问令牌是否已过期。如果是,我会使用数据库中的refresh_token
生成一个新的访问令牌。因此,每次服务器访问用户的帐户时,它都将使用数据库中的访问令牌。另外,请确保将访问类型设置为offline
,如下所示:
$client->setAccessType('offline');
如果您习惯于制作“普通”网页,那么异步工作通常会破坏工作流程,因为任何异步活动都会超出通常的请求生命周期。
您需要将异步任务委派给专用程序,进程或线程。这意味着使用一种排队系统并具有一个单独的进程,其工作是在排队系统中运行任务并更新状态。
如果你正在学习的路上,我建议你自己推出 - 最小的排队系统是一个很好的学习项目;您可以使用常规数据库管理系统将其推出。你必须注意竞争条件(提示:使用行锁)。
如果你正在进行制作,我建议使用像ZeroMQ这样的东西 - 我知道有很好的PHP绑定。
除了让您的网站更新并从排队系统中读取外,您还需要任务运行器 - 最简单的形式是预定作业;你可以做一个生活在while
循环中的简单php脚本,睡眠一段时间(取决于你正在构建的软件的流量),检查作业队列中是否有东西,并在需要时进行更新。
您可能需要了解如何在每次计算机启动时运行进程以执行此操作,否则简单的系统重新启动会使您的设置生效。
最后,工作流程有点像这样: