整天见到一群人喷「自我阉割」,怎么一讨论到 idea 就都上来先「审查!!」
----
说几个硬伤
1. 对于 IM 来说,长链接是非常不经济的,server 和 client 都一样。大多数 im 都会保持一个流量或者负载很小的长链接来同步一些服务器状态,然后消息体用 UDP/短会话连接来发。这个设计里「除非退群否则还会一直保持连接」,我 client 关了群聊还要同时保持数十个群服务器的连接?意义何在?而且根据这个架构,这些群连接是不可能多路复用的,我真的 **必须保持几十个 TCP 连接,占掉几十个端口**。
2. 群服务器之间并不相互通信,所以「任何一个人服务器毁灭不影响整体」纯属无稽之谈,如果服务器=社区,一个服务器没了整个社区都会消失。请务必注意你现在的设计里,社区是运行在单独一个「群服务器」上的,并不运行在整个网络上,这点前面的人说过了但我强调一下,这是与你根本目标「去中心化」最背道而驰的一个设计谬误。
3. 当新孤立用户加入网络的时候,他如何发现全网的群服务器?跟问题 2 类似,假设极端情况两个大「 _群服务器_ 群」间仅有很少的共同用户,当这些共同用户离线后,两个「群服务器群」之间就无法互相发现了。想象一下很少人会同时上 A (cfun)站 B (ilibili)站,当某些用户离线之后,新孤立用户发现 B 站在服务器列表上消失了,what?
4. 还是孤立用户的问题,如果有两个可通过其他方式联系的用户(比如现实好友),他们怎么在这个网络上开始通信?先扫到一个共有服务器?如果两边的网络环境不一样扫不到公共服务器呢?
5. 无法 invalidate 某用户过去发过的消息,这与隐私性极度相悖。由于群服务器和叶子结点客户端都是非官方、非自己控制的,因此不存在可靠机制能确保服务器或结点删除用户的数据。注意「群服务器」是社区搭建的,它完全可以私自镜像所有用户的聊天数据,而你没有任何手段去管控。设想我通过营销手段搭起了全网最大的群服务器,然后偷偷镜像所有聊天记录卖给黑产——没有任何人能管控得到我。请注意这不是个审查问题,这是 **安全问题**。 不过这点可以用与你设计中的朋友圈相同的机制解决:发出的消息只存本地,中转只中转公钥
还有这些相互矛盾的话(红)和无足轻重的特性(青)…… 建议别当成纲领性 feature 来宣传
----
大多数的 idea 根本走不到验证阶段
开始实践的 idea 也有相当一部分走不到运营阶段
运营阶段的 idea 大部分也会被现实因素否决
建议「先跑起来再说」