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) 服务端推送事件
- 建立连接
- 客户端发起请求,header
Accept: text/event-stream - 服务端相应,header
Content-Type: text/event-stream - 此后保持连接,服务端可以向客户端发送消息。如果断开,客户端会进行重连。
- 发送消息
- data 消息体。
- id(optional) 用于重连。
- event(optional) 事件类型,客户端用来区分消息。
- retry(optional) 自动重连等待时间。
- 只能发送文本信息。
chatfairy 使用 SSE 实现聊天。
- 客户端通过普通的 http 请求发送数据到服务端。
- 客户端与服务端建立 SSE 连接。
- 服务端通过 SSE 连接,将收到的所有消息按顺序返回到客户端。