AI 人格化数字空间:一个 MVP 产品方案
当主流内容平台越来越像”信息流流水线”,个体表达被算法压缩、数字身份碎片化分布在多个 App 中——
我们或许需要一种新的产品形态:让 AI 帮每个人构建一个属于自己的”人格化数字空间”。
这是一份围绕该方向的 MVP 产品方案。
当主流内容平台越来越像”信息流流水线”,个体表达被算法压缩、数字身份碎片化分布在多个 App 中——
我们或许需要一种新的产品形态:让 AI 帮每个人构建一个属于自己的”人格化数字空间”。
这是一份围绕该方向的 MVP 产品方案。
- [应用协议都有哪些](#应用协议都有哪些)
延展了解:WWW是什么
凡是上网的人,谁不知道“WWW”的重要作用?要输入网址,首先得打出这三个字母来。
万维网是无数个网络站点和网页的集合,它们在一起构成了因特网最主要的部分。



接下来应用程序(浏览器)通过调用 Socket 库,来委托协议栈工作。协议栈的上半部分有两块,分别是负责收发数据的 TCP 和 UDP 协议,它们两会接受应用层的委托执行收发数据的操作。

在 HTTP 传输数据之前,首先需要 TCP 建立连接,TCP 连接的建立,通常称为三次握手。这个所谓的「连接」,只是双方计算机里维护一个状态机,在连接建立的过程中,双方的状态变化时序图就像这样。







Web服务器解析请求,定位请求资源。服务器将资源复本写到TCP套接字,由客户端读取。一个响应由状态行、响应头部、空行和响应数据4部分组成。
HTTP响应与HTTP请求相似,HTTP响应也由3个部分构成,分别是:

。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
3.一个 TCP 连接中 HTTP 请求发送可以一起发送么(比如一起发三个请求,再三个响应一起接收)?
答:在 HTTP/1.1 存在 Pipelining 技术可以完成这个多个请求同时发送,但是由于浏览器默认关闭,所以可以认为这是不可行的。在 HTTP2 中由于 Multiplexing 特点的存在,多个 HTTP 请求可以在同一个 TCP 连接中并行进行。
4.浏览器对同一 Host 建立 TCP 连接到数量有没有限制?
答:有。Chrome 最多允许对同一个 Host 建立六个 TCP 连接。不同的浏览器有一些区别。

下面两图中,浏览器中填入的是相同的URL,左边是正确响应,而右边则是被劫持后的响应
所以 HTTP 传输面临的风险有:
(1) 窃听风险:黑客可以获知通信内容。
(2) 篡改风险:黑客可以修改通信内容。
(3) 冒充风险:黑客可以冒充他人身份参与通信。
(关于加密方式)
非对称加密
缺点:公钥是公开的,所以针对私钥加密的信息,黑客截获后可以使用公钥进行解密,获取其中的内容;
公钥并不包含服务器的信息,使用非对称加密算法无法确保服务器身份的合法性,存在中间人攻击的风险,服务器发送给客户端的公钥可能在传送过程中被中间人截获并篡改;
使用非对称加密在数据加密解密过程需要消耗一定时间,降低了数据传输效率;
结合两者
假如 Alice 向 Bob 传送数字信息,为了保证信息传送的保密性、真实性、完整性和不可否认性,需要对传送的信息进行数字加密和签名,其传送过程为

示例代码
1 | ComputerDirector director=new ComputerDirector();//1 |
背景:小成希望去电脑城买一台组装的台式主机
过程:
步骤1: 定义组装的过程(Builder):组装电脑的过程
1 | public abstract class Builder { |
步骤2: 电脑城老板委派任务给装机人员(Director)
1 | public class Director{ |
步骤3:创建具体的建造者(ConcreteBuilder):装机人员
1 | //装机人员1 |
步骤4:定义具体产品类(Product):电脑
1 | public class Computer{ |
步骤5:客户端调用-小成到电脑城找老板买电脑
1 | public class Builder Pattern{ |
需要生成的产品对象有复杂的内部结构,这些产品对象具备共性;
隔离复杂对象的创建和使用,并使得相同的创建过程可以创建不同的产品。
建造者模式所创建的产品一般具有较多的共同点,其组成部分相似;如果产品之间的差异性很大,则不适合使用建造者模式,因此其使用范围受到一定的限制。
如果产品的内部变化复杂,可能会导致需要定义很多具体建造者类来实现这种变化,导致系统变得很庞大。
1 | public abstract class AbstractClass { |
1 | public class ConcreteClass extends AbstractClass { |
1 | public class TemplateMethod { public static void main(String[] args) { AbstractClass obj = new ConcreteClass();//多态构建 //调用模板方法 obj.work(); }} |
定义直播模板类
1 | public abstract class LivePlay { //模板方法 public final void seeLivePlay() { login(); openRoom(); startAudioAndVideoStream(); pushVideoStream(); stopAudioAndVideoStream(); closeRoom(); } //实体方法,这个方法实现通用的业务逻辑 private void login() { System.out.println("用户登录"); } /*抽象方法*/ //打开房间 public abstract void openRoom(); //打开音视频流 public abstract void startAudioAndVideoStream(); //关闭音视频流 public abstract void stopAudioAndVideoStream(); //关闭房间 public abstract void closeRoom(); /*钩子方法,可以被需要的子类overwrite*/ //旁路推流,可以通过视频链接在浏览器中查看视频 public void pushVideoStream() { }} |
定义具体的实体类,根据情况overwrite相应的抽象方法和钩子方法。
```java//腾讯直播类public class TencentLivePlay extends LivePlay { @Override public void openRoom() { System.out.println("腾讯打开房间"); } @Override public void startAudioAndVideoStream() { System.out.println("腾讯打开音视频流"); } @Override public void stopAudioAndVideoStream() { System.out.println("腾讯关闭音视频流"); } @Override public void closeRoom() { System.out.println("腾讯关闭房间"); } //覆写钩子方法,提供旁路推流功能 @Override public void pushVideoStream() { super.pushVideoStream(); System.out.println("腾讯进行旁路推流"); }}```
1 | //金山直播类public class JinShanLivePlay extends LivePlay { @Override public void openRoom() { System.out.println("金山打开房间"); } @Override public void startAudioAndVideoStream() { System.out.println("金山打开音视频流"); } @Override public void stopAudioAndVideoStream() { System.out.println("金山关闭音视频流"); } @Override public void closeRoom() { System.out.println("金山关闭房间"); }} |
客户端调用
我们根据后端返回的结果来决定使用哪家的SDK
1 | public static void main(String[] args) { //此处省略若干代码 ... LivePlay tencentLive=new TencentLivePlay(); tencentLive.seeLivePlay(); System.out.println(""); LivePlay jinShanLive=new JinShanLivePlay(); jinShanLive.seeLivePlay(); } |