简要总结
Presence
这页说明书在讲一个叫“Presence”的小工具。你可以把它想成一个“谁在这里”的小名单。它会告诉大人们,现在有哪些电脑和软件正在一起工作。比如,当你在用苹果电脑上的一个软件时,这个名单就会显示出来,让大人一眼就能看到谁在。
这页内容适合大人们想知道“现在都有谁连上了”的时候看,也适合他们发现名单上名字重复了,想弄明白为什么的时候看。
五岁小孩版解释
“Presence”就像一个小名单,它会努力地记录两件事:第一,记录一个叫“Gateway”(你可以把它想成一个总开关)的电脑自己。第二,记录所有连接到这个总开关的朋友们,比如苹果电脑上的软件、网页聊天工具、或者用键盘打命令的工具。
这个名单上会写什么呢?它会写一些关于每个朋友的小信息,比如:
- instanceId:一个像“学号”一样稳定的名字。最好每个朋友都有一个,这样就算他离开再回来,我们还是知道是他。
- host:一个容易记住的电脑名字。
- ip:电脑的地址。
- version:朋友用的软件是哪个版本的。
- mode:朋友是什么类型的,比如是“ui”(有画面的软件)、“webchat”(网页聊天)还是“cli”(用键盘打命令的)。
- lastInputSeconds:这个朋友上次动鼠标或键盘是多久以前。
- reason:他为什么出现在名单上,比如是自己来的,还是别人介绍的。
- ts:最后一次更新名单的时间。
这个名单是怎么来的呢?有好几个地方会告诉它:
- 总开关自己:总开关一启动,就会先把自己的名字写在名单最前面。
- 新朋友握手:每当一个新朋友通过“握手”(WebSocket连接)成功连上总开关,他的名字就会被加进名单。但是,如果这个朋友是“cli”(用键盘打命令的),而且只来一下就走了,为了不让名单乱糟糟,他的名字不会被写上去。
- 朋友定期报告:已经连上的朋友(比如苹果电脑上的软件)会定期发一个“系统事件”消息,告诉名单自己最新的名字、地址和上次活动时间。
- 特别的“节点”朋友:有一种叫“节点”(node)的特别朋友连上来时,也会被加到名单里。
所有名字会放在一起。怎么知道谁是谁呢?主要靠那个稳定的“学号”(instanceId)。如果两个朋友没有“学号”,或者“学号”总变,他们可能会在名单上出现两次,看起来就像两个人,其实可能是一个人。
这个名单不会一直记着所有事:
- 会忘记:如果一个朋友超过5分钟没有新消息,他的名字就会被擦掉。
- 名单不长:最多只记200个朋友的名字,如果满了,就把最久没联系的那个名字擦掉。
有一个小麻烦:如果朋友是通过一条特别的隧道(SSH隧道)连过来的,总开关可能会看到他的地址是“127.0.0.1”(这是一个只在自己电脑里用的地址)。为了不把这个奇怪的地址覆盖掉朋友自己报告的好地址,名单会忽略这个隧道地址。
谁会用这个名单呢?主要是苹果电脑上的软件。它会把这个名单显示在一个叫“Instances”(实例)的标签页里,并且根据朋友最后活动的时间,在旁边画一个小点点,表示他是“活跃的”、“发愣的”还是“太久没动静的”。
如果大人想看看名单到底怎么了,或者发现名字重复了,可以这样做:
- 直接向总开关询问名单的原始内容(调用
system-presence方法)。 - 如果看到重复的名字,检查一下:
- 朋友们在“握手”时,是不是都报上了自己稳定的“学号”(
client.instanceId)。 - 朋友们定期报告时,用的“学号”是不是和握手时一样。
- 看看是不是有些通过连接自动生成的名字缺少“学号”,如果是,那出现重复就是正常的。
- 朋友们在“握手”时,是不是都报上了自己稳定的“学号”(