# Mastodon简介

By [水果榨汁儿](https://paragraph.com/@0x3467e8e4de26eef16b6637ecd4fd5fcd68c77b36) · 2023-07-18

---

![](https://storage.googleapis.com/papyrus_images/801f795f3094eba5405ab22de95ff2d4c0ed0b61c5e0c4e440464f3a8fecfab0.png)

**一.相关协议：**

1.[ActivityPub](https://www.w3.org/TR/activitypub/) 协议：实例间的通信使用的是 [ActivityPub](https://www.w3.org/TR/activitypub/) 协议，这个协议把常见的 Social Activity 封装为不同的数据格式。

2.[WebFinger](https://docs.joinmastodon.org/spec/webfinger/)协议：先说说 handle 这个概念，在 Twitter 上我们想要 `@` 一个用户时，只需 `@someone` 就行了，因为这个用户只存在于 Twitter 的服务器上。但如果在 MSA 上想要 `@` MSB 上的一个用户的话，仅仅 `@someone` 就不够了，需要 `@someone@msb.com` 才能完整表达，这个 `@someone@msb.com` 就是 handle（就像 email address 一样）。

接下来的问题就是，我知道了 `@bob@msb.com`，如何把 `follow` 这个行为发送过去呢？这就需要知道 `bob` 在 `msb.com` 上的 inbox URL，而获取的方法就是使用 WebFinger 协议。只需要请求这个 URL

    https://msb.com/.well-known/webfinger?resource=acct:bob@msb.com
    

就能拿到 bob 在 msb.com 上的一些信息，就像这样：

    {
        "subject": "acct:bob@msb.com",
        "links": [
            {
                "rel": "self",
                "type": "application/activity+json",
                "href": "https://msb.com/users/bob"
            }
        ]
    }
    

这个 `https://msb.com/users/bob` 就是 bob 的 profile URL。但这还不够，毕竟我们要往 bob 的 inbox 去发送数据，还需要知道 bob 的 inbox URL。这个也很简单，只要在 profile URL 后面加上 `.json` 就行了。比如要获取 `Gargron` 这个用户在 `mastodon.social` 上的 inbox URL，可以请求 [https://mastodon.social/users/Gargron.json](https://mastodon.social/users/Gargron.json)，结果中就会有这个 inbox URL

然后把 Follow 这个行为，封装成 ActivityPub 中定义的数据格式发送到 inbox URL 就行了，对方的服务器就知道 Alice follow 了 Bob，Bob 的 Follower 列表里会增加 `alice@msa.com` 这一项

Bob 如果发布一条 post，该 post 的内容就会被发送到 Alice 所在的服务器 MSA。

此时 Alice 如果浏览自己的 Home Timeline，就能看到 Bob 发的这个 post。

这样，借助 WebFinger 和 ActivityPub 协议，Mastodon 实例之间就能实现关注、点赞等常见社交行为。而社交行为并非只有 Twitter 这种形式，Instagram、YouTube 等 App 也可以有社交行为，那么是否可以基于 ActivityPub 去构建此类 App 呢？当然可以，比如 [Pixelfed](https://pixelfed.org/) 就是一个类似 Instagram 的服务，[Peertube](https://joinpeertube.org/) 则是类似 Youtube 的实现。

**二.相关应用**

1.[Pleroma](https://pleroma.social/)，一个模块化的微博引擎

2.[Pixelfed](https://pixelfed.org/)，联合图像共享平台，可让您共享和使用媒体帖子

3.[Misskey](https://misskey-hub.net/en/)，其中包括微博和可定制的仪表板

4.[PeerTube](https://joinpeertube.org/)，可让您将视频上传到频道

**三.Q&A**

**如何找到我可以加入的 Mastodon 实例？**  
可以使用 [instances.social](https://instances.social/) 或浏览 Mastodon 官方的 [servers 列表](https://joinmastodon.org/servers)。

**如何 follow fediverse 里的用户？**  
每个 fediverse 用户都会有一个 handle（类似 email address），如 `@limboy@mas.to`，搜索这个 handle 就能找到对应的用户。比如我在 `mas.to` 实例，而梁欢在 `alive.bar` 实例，在 `mas.to` 里搜索 `@lianghuan@alive.bar` 就能找到他，并关注。

**可以加入多个 Mastodon 实例吗？**  
当然可以，就像你可以 join 多个 subreddit 一样。比如在游戏相关的 Mastodon 实例可以发表游戏相关的内容，在科幻小说的 Mastodon 实例里可以聊阿西莫夫。但需要注意每次加入新的实例都需要注册一个新的账号。

**如何找到我在 Twitter 关注的人他们在 Fediverse 的账号？**  
可以试试 [Fedifinder](https://fedifinder.glitch.me/) 或 [movetodon](https://www.movetodon.org/)。

**除了 Mastodon 自带的 UI 外，有推荐的第三方 App 么？**  
web 端的话推荐 [elk](https://elk.zone/)， 由 nuxt 团队开发，品质有保障。iOS 的话 Tweetbot 团队的 [Ivory](https://tapbots.com/ivory/) 目前正在内测，可以期待下。Mastodon 官方也有一个[推荐列表](https://joinmastodon.org/apps)，可以一并看下。

**我有一个 Twitter 账号，应该迁移到 Mastodon 吗？**  
可以先找到一个 Mastodon 实例体验下，Follow 些用户慢慢玩起来。Twitter 虽然有它自己的问题，但毕竟有那么多的活跃用户和潜在的感兴趣内容，这些独特的价值短时间内还是很难被取代的。

**可以把 Tweet 内容同步到 Mastodon 吗？**  
如果同时在使用 Twitter 和 Mastodon，同样的内容两边都发一遍还是会有点麻烦，可以试试 [moa.party](https://moa.party/) 这个服务，绑定 Twitter 和 Mastodon 账号后，就可以自动同步了（没有试过，不保证效果）。

**我应该建一个自己的 Mastodon 实例吗？**  
如果你在一个组织或团队，且内容是可以公开的，可以考虑建一个，这样可以方便了解大家都在做什么，也能产生互动，内容沉淀和传播上也会比「群」要好。比如 ThoughtWorks Infra 就建了一个 Mastodon 实例：[toot.thoughtworks.com](https://toot.thoughtworks.com/public/local)。

[这篇文章](https://martinfowler.com/articles/your-org-run-mastodon.html)阐述了为什么你应该为自己的 Organization 建一个 Mastodon。

**Mastodon 和 Twitter 在产品层面有哪些差异？**

*   Mastodon 没有广告。
    
*   Mastodon 默认可以发表 500 个字（管理员可以自行设置）。
    
*   Tweet 在 Mastodon 叫 Toot，Retweet 在 Mastodon 叫 Boost。
    
*   Mastodon 可以编辑 Toot！(3.5 版本加的[这个功能](https://blog.joinmastodon.org/2022/03/mastodon-3.5/))
    
*   Mastodon 的 Timeline 没有算法「干扰」。
    
*   Mastodon 没有 Quote Tweet 功能。
    
*   Mastodon 没有 Full Text Search 功能，但可以搜 hashtag，如 `#book`。
    
*   Mastodon 里的 Favorite 不会像 Twitter 的 Like 一样推送给 Follower。
    
*   Mastodon 的 Toot 可见范围有 4 个 Level，Tweet 只有 Everyone 和 Circle 两个 Level。
    
    *   direct: 只有提及的用户才能看到这条消息，就像 Twitter 的 Direct Message。
        
    *   followers-only: 只有关注你的用户才能看到这条消息。
        
    *   unlisted: 不会出现在 Local 或 Federated Timeline，但是关注你的用户或点击你主页依旧能看到。
        
    *   public: 完全公开。
        

**Mastodon 还有哪些非常规操作？**  
可以用来作为评论系统。在 Mastodon 上发布文章链接，得到 toot id，然后通过 API 请求该 toot 的 replies，将它们展示到评论区。[这位同学](https://carlschwan.eu/)就是[这么实践](https://carlschwan.eu/2020/12/29/adding-comments-to-your-static-blog-with-mastodon/)的。

---

*Originally published on [水果榨汁儿](https://paragraph.com/@0x3467e8e4de26eef16b6637ecd4fd5fcd68c77b36/mastodon)*
