随机员工在CloudFlare聊天

2021-03-21 07:22:45

由于Covid-19大流行,大多数CloudFlare办事处于2020年3月关闭,员工开始在家工作。在线会议出现了自己的挑战,但保留了物理办公室的偶然遭遇的好处是我们挣扎的东西。那些非正式的互动,就像咖啡机旁边谈论的团队,帮助将公司一起举起的社交胶水。

在CloudFlare的工程师介绍了“随机工程师聊天”,试图重新创建那种经验,David Wragg推出了“随机工程师聊天”(我们将它们称为“随机员工聊天”,因为这可以应用于任何团队)。这个想法是,参与者是随机配对的,并且对然后时间安排30分钟的视频通话。这些对话没有固定议程,但参与者可能会在其他团队中学习发生的事情,通过讨论它或结识新的人来获得新的工作。

随机员工聊天的第一次迭代使用共享电子表格来协调该过程。人们会通过将自己添加到电子表格,并每周一次,David将从列表中随机形成对,并发送带有结果的电子邮件。然后,每对都会在方便的时候安排呼叫。这个过程是这个想法的最低可行实施,但这意味着该过程依赖于一个人。

我们希望自动化这些重复的手动任务,并且自然地,我们希望使用CloudFlare工人来做。这是一个完整应用程序的一个很好的例子,它完全在边缘的CloudFlare工人上运行,没有后端或原点服务器。

工作人员符合所有这些要求,结果应用程序在CloudFlare' s边缘网络中运行,无需在其他平台上运行代码或存储数据。工人脚本提供返回静态HTML和JavaScript资产的UI,以及存储,工人KV跟踪登录的人。

我们最近还宣布了工人Cron触发器,允许我们在定义的时间表上运行CloudFlare Workers脚本。工人Cron Triggers非常适合在会话之前配对人员,并提醒用户注册下一个会话。

界面非常简单。它显示参与者列表,并允许用户注册下一个会话。

当用户单击寄存器按钮时,它会调用API,该API在工人kv中添加密钥:

用户信息存储在工人KV中,并在接口中显示以创建参与者列表。用户信息在配对期间删除,因此列表已准备好用于下一轮聊天。我们需要从想要参加聊天的参与者的每周注册以确认他们的可用性。

随机员工聊天是一对一的对话,所以在一定时间内,应用程序将参与者成对。每个星期一早上在0800 UTC时,工人Cron作业运行配对脚本,该配对脚本正在使用Wrangler部署。

Wrangler支持使用熟悉的Cron符号配置作业的计划。例如,我们的Wrangler.Toml有:

名称=" randengchat-c​​ron-pair" type =" webpack" consub_id =" ..." webpack_config =" webpack.config.js&#34 ; ... kv_namespaces = [...] [触发] crons = [" 0 8 * * 2"]

配对脚本是应用程序中最复杂的部分,因此让我们通过其代码来运行。首先,我们列出当前注册的用户。这是使用Workers KV提取键的列表函数与前缀寄存器完成:。

如果我们没有偶数参与者,我们将从列表中删除一个人(David!)。

async函数createweightedpair(){const对= []; for(让我= 0; i< keys.length - 1; i ++){for(let j = i + 1; j< keys.length; j ++){const重量=(...)等待(...)) * -1;对.push([i,j,weigh]); }}返回对;}

例如,假设四个人已经注册(Tom,Edie,Ivie和Ada),这是6对的(4选择2)。我们最终可能会有以下对及其相关权重:

使用过去匹配的对匹配的次数来计算权重,以避免在已经满足的人之间调度聊天。可以考虑更复杂的因素,例如相同的办公室或时区,当时他们遇到的等等等等。

我们跟踪使用保存在kV中的计数匹配的次数匹配的次数:

async函数copttimespaired(key){const v = await db.get(key," json"); if(v!== null&& v.count){return v.count; }返回0;}

人民与人们形成一个完整的图表,作为节点,边缘加权边缘连接的两个人的次数。

接下来,我们运行加权匹配算法,在我们的曲目中,这将在图表上找到最大匹配(一组边缘,最大化与每个人完全一切显示的人数的人数的数量最大化)。当我们使用开花算法的加权形式时,我们也最小化了路径权重。这具有找到最佳成对的效果,最小化人们先前遇到的次数。

在上面的算法上,算法表明最佳成对是(Tom,IVIE)和(EDIE,ADA)。 在这种情况下,这些对以前从未见过面。 该对在工人KV中记录了他们更新的匹配计数,以优化未来会话的重量: 通知发送给每对用户,以通知它们它们匹配。 该应用程序将用户提醒每周注册。 对于提醒而言,我们使用另一名工人Cron作业,每周四在1300 UTC中运行。 争吵者的时间表是 此脚本比配对脚本更简单。 它只是向我们公司消息传递平台中的房间发送消息,该平台通知所有频道的所有成员。 我们希望您发现这段代码有用,它激励您使用工人,工人kv,工人unbound和workers cron触发器写入完全没有后端服务器的大型实际应用程序。 CloudFlare Workers CloudFlare Workers KV Cron Wrangler