遇寻

China
遇寻
1 | netty:粘包与拆包的处理

1 | netty:粘包与拆包的处理

TCP是个流协议,流是一串没有界限的数据。TCP会根据TCP缓冲区的实际情况对包进行划分。因此造成一个完整的业务包,会被TCP分成多个包、把多个包封装成一个大的包进行发送。 粘包与拆包现象 服务端分两次读取到了两个独立的数据包,分别是D1和D2,没有粘包和拆包; 服务端一次接收到了两个数据包,D1和D2粘合在一起,被称为TCP粘包; 服务端分两次读取到了两个数据包,第一次读取到了完整的D1包和D2包的部分内容,第二次读取到了D2包的剩余内容,这被称为TCP拆包; 服务端分两次读取到了两个数据包,第一次读取到了D1包的部分内容D1_1,第二次读取到了D1包的剩余内容D1_2和D2包的整包。 产生原因 应用程序write写入的字节大小/大于套接口发送缓冲区大小; 进行MSS大小的TCP分段; 以太网帧的payload大于MTU进行IP分片。 对于Linux,发送缓冲区的默认值为:16384。可使用下面命令查看: # 接收 cat /proc/sys/net/ipv4/tcp_rmem # min default max # 4096 87380 6291456

MySQL备份记录

MySQL备份记录

备份 命令行下具体用法如下: mysqldump -u用戶名 -p密码 -d 数据库名 表名 > 脚本名; 导出整个数据库结构和数据 mysqldump -h localhost -uroot -p123456 database > dump.sql 导出单个数据表结构和数据 mysqldump -h localhost -uroot -p123456  database table > dump.sql 导出整个数据库结构(不包含数据) mysqldump -h localhost -uroot -p123456  -d database > dump.sql 导出单个数据表结构(不包含数据) mysqldump -h localhost -uroot -p123456

两个Netty入门用法Demo

两个Netty入门用法Demo

大概一年多前,用过Netty做局域网内自动组网,但是当时的主要代码不是我写的,并且时间过了很久,忘得差不多了,然而发现Netty确实是一个很有意思的框架,值得去深入研究、学习。本文的例子,之前也看过、写过,在各种介绍Netty的书籍中都有看到,并且Netty的官方文档也有这样的例子。 EchoServer Netty官方Echo例子,其实在源码中也有该例子。 EchoServer import io.netty.bootstrap.ServerBootstrap; import io.netty.channel.ChannelFuture; import io.netty.channel.ChannelInitializer; import io.netty.channel.ChannelOption; import io.netty.channel.EventLoopGroup; import io.netty.channel.nio.NioEventLoopGroup; import io.