跳到主要内容

其它

进程间通信

  1. 匿名管道

半双工,父子进程通信

  1. 命名管道

半双工,进程间通信

  1. 信号

用于通知进程某个事件发生

  1. socket套接字

用于不同机器间通信

  1. 共享内存

    进程分配的虚机内存映射同一个物理内存

  2. 信号量

    用来锁资源,进程不能同时获取共享内存。

进程与线程的区别

进程是操作系统资源分配的基本单位,线程是任务执行的基本单位。

多线程共享内存空间,多进程不共享内存空间。

线程创建开销小,进程开销大。

二维码登录

粗略过程,以腾讯课堂为例

  1. 点击登录加载一个iframe子页面,路径为https://xui.ptlogin2.qq.com/cgi-bin/xlogin?xxx=yyy
  2. 子页面中,发送生成二维码的请求
  3. Web服务器收到请求后,生成一个唯一的ID(UUID)
  4. Web服务器返回二维码给浏览器,二维码中含有该UUID
  5. 浏览器通过接口https://ssl.ptlogin2.qq.com/ptqrlogin?xxx=yyy向Web服务器进行轮询,获取二维码的状态。初始状态为:二维码未生效。
  6. 使用QQ扫码
  7. 扫码解析到二维码中的UUID,并把QQ的用户Token和UUID一起发送给Web服务器。二维码状态变为认证中。
  8. 服务器收到请求后,把UUID和token绑定,并发送一个临时token给手机QQ
  9. 用户在手机QQ点击确认登录。二维码状态变为已确认。
  10. 由于浏览器在轮询,可以得知二维码状态变为已确认,并且轮询可以拿到服务器返回的新token(或者是种下Cookie)
  11. 使用该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?接口拿到的。