Skip to main content

Others

进程间通信

  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?接口拿到的。