Skip to content

socket ​

前言:详细探讨 socket 技术 ​

socket 原理 ​

socket连接图示

发送和接收中的问题讨论 ​

是 buffer 还是 string ​

发送过快导致的消息粘包 ​

单独发送时的消息分包 ​

自定义消息体的规范 ​

socket 反复重连的问题 ​

  1. 不要使用特殊字符作为包的结束,这样会增加接收包 的判断损失。利用标准规范进行发送。 |--包头--|--包长度--|--包体--|

理解 node socket end ​

在使用 socket.end() 函数时。 实际上是服务端先向客户端发送了结束包, 然后根据客户端的 fin 消息进行的关断。 所以在客户端断网时,服务端是无法实现通道销毁的。 此时需要根据 socket 时间的结果来判断客户端是否出现中断。 进一步说明,在通讯逻辑错误的时候,也无法利用 end 事件来关断 socket 通道。

socket 复杂业务逻辑的架构 ​

安全及稳定 ​

  1. 连接数量的限制
  2. 请求频次的限制
  3. 错误及历史日志的记录
  4. 消息包长度的限制
  5. 消息包内容的限制
  6. 错误处理的判别
  7. 防止请求包的丢失,消息队列的保存

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

socket 架构设计 ​

参考文章 ​

  1. socket 连接错误

  2. super socket 架构

  3. socket 设计经验

  4. 清除 socket 对象

  5. socket 内存消耗