通信开发
2019-07-25 10:16:59 0 举报
AI智能生成
通信
作者其他创作
大纲/内容
序列化
人类可读性
文本
二进制
字节序(大端、小端)
可扩展性,兼容性
性能
序列化反序列化所需时间
序列化数据大小
压缩
安全
加密
完整性
奇偶、crc、md5等
通用性
是否需要静态编译(是否需要idl辅助)
要(protobuf等)
不需要(json、hessian等)
一些通用序列化
json
jsonrpc
xml
ws
protobuf、protostuff
hessian
其他
java inner、avro、msgPackage、thrift等
是否语言无关
io模型
阻塞oio
多路复用nio
操作系统相关
参考Unix网络模型
消息语义(对于通信的两端)
1、是否只发一次,发出去就不管
2、是否确保对方一定收到(通过收到对端的响应)
3、有且只有一次。这在通信层做不到,
需要在2的基础上,接收端需要做幂等处理
需要在2的基础上,接收端需要做幂等处理
框架成熟度、易用性、可扩展性、可维护性
抓包工具(wireshark, tcpdump)
传输层
tcp
http
粘包
长度
结束符
回车换行
其他字符或字符串
字节和字节转义
长连接
链路保持(心跳/tcp层的keepalive)
自动重连
连接池(oio需要,nio只有在有竞争的情况下需要,比如通过公网路由器)
udp
串口
其他
编程模式(线程模型)
actor
erlang
akka
reactor
nginx、netty(mina)、redis
preactor
消息构成
消息头
通用头
长度,id,版本(可能只在登录消息),
压缩,消息类型(rpc可能对应类名)
超时(可以需要(单位秒))
压缩、加密
压缩,消息类型(rpc可能对应类名)
超时(可以需要(单位秒))
压缩、加密
请求头
响应头
响应码
性能要求不高时,
错误码可以跟错误描述
错误码可以跟错误描述
消息体(负载)
业务
消息尾(可选)
结束符
校验
rpc
grpc、hessian、thrift、ws
dubbo、sofa-rpc
消息队列
redis、activemq、rabbitmq、kafka、Pulsar
jms、mqtt、amqp、stomp、私有
基于log的可重复消费
字节拷贝
协议转换,最好同一套协议
零拷贝( pagecache直接到nic缓冲)
0 条评论
下一页