Others
进程间通信
- 匿名管道
半双工,父子进程通信
- 命名管道
半双工,进程间通信
- 信号
用于通知进程某个事件发生
- socket套接字
用于不同机器间通信
-
共享内存
进程分配的虚机内存映射同一个物理内存
-
信号量
用来锁资源,进程不能同时获取共享内存。
进程与线程的区别
进程是操作系统资源分配的基本单位,线程是任务执行的基本单位。
多线程共享内存空间,多进程不共享内存空间。
线程创建开销小,进程开销大。
二维码登录
粗略过程,以腾讯课堂为例
- 点击登录加载一个
iframe子页面,路径为https://xui.ptlogin2.qq.com/cgi-bin/xlogin?xxx=yyy - 子页面中,发送生成二维码的请求
- Web服务器收到请求后,生成一个唯一的ID(UUID)
- Web服务器返回二维码给浏览器,二维码中含有该UUID
- 浏览器通过接口
https://ssl.ptlogin2.qq.com/ptqrlogin?xxx=yyy向Web服务器进行轮询,获取二维码的状态。初始状态为:二维码未生效。 - 使用QQ扫码
- 扫码解析到二维码中的UUID,并把QQ的用户Token和UUID一起发送给Web服务器。二维码状态变为认证中。
- 服务器收到请求后,把UUID和token绑定,并发送一个临时token给手机QQ
- 用户在手机QQ点击确认登录。二维码状态变为已确认。
- 由于浏览器在轮询,可以得知二维码状态变为已确认,并且轮询可以拿到服务器返回的新token(或者是种下Cookie)
- 使用该token(或Cookie)作为用户的身份信息。
客户端跳转
粗略过程,以腾讯课堂为例
若我们没有在浏览器登录过腾讯课堂,而在QQ客户端中点击腾讯课堂的入口,打开的网页却是已经登录过的状态,这就是客户端跳转。类似的场景还有通过QQ客户端打开QQ空间/QQ邮箱,你会发现打开的网页已经是登录了的状态。
当我们在QQ客户端点击腾讯课堂的图标时,访问的链接形如https://ssl.ptlogin2.qq.com/jump?clientuid={qq号}&clientKey={票据},从而拿到用户的身份信息后再重定向到腾讯课堂页面。
还有个点,之前提到的那个子页面,呈现的不仅仅是二维码,还有此前登录过的QQ号。
这些QQ号是通过请求https://localhost.ptlogin2.qq.com:4301/pt_get_uins?接口拿到的。