Appearance
socket
前言:详细探讨 socket 技术
socket 原理
发送和接收中的问题讨论
是 buffer 还是 string
发送过快导致的消息粘包
单独发送时的消息分包
自定义消息体的规范
socket 反复重连的问题
- 不要使用特殊字符作为包的结束,这样会增加接收包 的判断损失。利用标准规范进行发送。
|--包头--|--包长度--|--包体--|
理解 node socket end
在使用 socket.end() 函数时。 实际上是服务端先向客户端发送了结束包, 然后根据客户端的 fin 消息进行的关断。 所以在客户端断网时,服务端是无法实现通道销毁的。 此时需要根据 socket 时间的结果来判断客户端是否出现中断。 进一步说明,在通讯逻辑错误的时候,也无法利用 end 事件来关断 socket 通道。
socket 复杂业务逻辑的架构
安全及稳定
- 连接数量的限制
- 请求频次的限制
- 错误及历史日志的记录
- 消息包长度的限制
- 消息包内容的限制
- 错误处理的判别
- 防止请求包的丢失,消息队列的保存
mtu
linux 查看 mtu
bash
ifconfig | grep -i mtu配置 mtu 大小
bash
sudo vi /etc/network/interfaces添加 mtu 5000 即可
mss
修改 mss
bash
sudo iptables -A FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu