Socket

IPC - Unix Domain Sockets

  • IPC: inter-process communication
  • BSD: Berkeley Software Distribution: a UNIX-based computer operating system

Socket API

  • socket(): 创建一个 socket/endpoint 用于通信。设置通信终端的域名/domain 和语义(TCP、UDP、raw)。可以是 integer 或 对象(不同语言而定)。
    • python: sock = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
  • bind(): server 端使用。给 socket 映射到一个引用(referrence),引用通常是 IP:Port 或文件,用于进程间通信(IPC)。
    • python: sock.bind("ip:port or filename")
  • listen(): server 端使用。表示准备好接进来的连接。
    • python: scok.listen(1) 1 表示等待连接的队列长度为 1。
  • connect(): client 端使用。将客户端 socket 与服务端关联起来,使之可以通信。三次握手发生在这里。这里的引用也是 IP:Port 或文件。
  • accept(): server 端使用。接受一个进来的连接,创建一个新的 socket。这个 socket 用来传递信息。
  • send() and recv(): 在节点之间传递信息。发送 bytes, "msgContent".encode()
  • close(): 释放资源,发起四次挥手。

SSE

阮一峰:SSE教程 (再次感叹大佬就是大佬,讲得清晰明了) 【公众号】解密 SSE,像 ChatGPT 一样返回流式响应

  • SSE(Server-Sent Events) 服务端推送事件
    • 单向通道:服务端向客户端
    • http 协议
  • 建立连接
    • 客户端发起请求,header Accept: text/event-stream
    • 服务端相应,header Content-Type: text/event-stream
    • 此后保持连接,服务端可以向客户端发送消息。如果断开,客户端会进行重连。
  • 发送消息
    • data 消息体。
    • id(optional) 用于重连。
    • event(optional) 事件类型,客户端用来区分消息。
    • retry(optional) 自动重连等待时间。
    • 只能发送文本信息。

chatfairy 使用 SSE 实现聊天。

  1. 客户端通过普通的 http 请求发送数据到服务端。
  2. 客户端与服务端建立 SSE 连接。
  3. 服务端通过 SSE 连接,将收到的所有消息按顺序返回到客户端。
目录