client与server先建立连接,连接建立后不断开,然后再进行报文发送和接收;此种方式常用于点对点通信;
client与server每进行一次报文收发交易时才进行通讯连接,交易完毕后立即断开连接;此方式常用于一对多通信;
长连接:多用于操作频繁、点对点通讯、而且连接数不能太多的情况,因为每个TCP连接的建立都需要三次握手、每个TCP连接的断开要四次握手,如果每次操作都要先建立连接然后再操作的话处理速度会降低;例如:数据库的连接用长连接,如果用短连接频繁的通信会造成socket错误,频繁的socket创建也是对资源的浪费。
短连接:web网站的http服务一般都用短连接。因为长连接对于服务器来说要耗费一定的资源,像web网站这么频繁的成千上万甚至上亿客户端的连接用短连接更省一些资源。试想如果都用长连接,而且同时有成千上万的用户,每个用户都占有一个连接的话,可想而知服务器的压力有多大。所以并发量大的情况下肯定用短连接。
Class.forName("com.mysql.jdbc.Driver");
// 建立连接
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306", "root", "ok");
Statement stmt = conn.createStatement();
ResultSet rs1 = stmt.executeQuery("show databases");
int num = 0;
while (rs1.next()) num++;
System.out.println("当前Mysql一共有"+num+"个数据库");
stmt.execute("use test");
ResultSet rs2 = stmt.executeQuery("select * from student");
num = 0;
while (rs2.next()) num++;
System.out.println("student表一共有"+num+"条数据");
// 释放连接
conn.close();
输出结果如下。
当前Mysql一共有17个数据库
student表一共有20条数据
show databases
use test
select * from student
Class.forName("com.mysql.jdbc.Driver");
for (int i=0;i<200;i++){
new Thread(()->{
try {
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306", "root", "ok");
//使当前线程阻塞,不关闭连接
System.in.read();
} catch (Exception e) {
e.printStackTrace();
}
}).start();
}
Data source rejected establishment of connection,
message from server: "Too many connections"
修改服务端配置信息
通过数据库连接池管理客户端连接


修改mysql启动参数文件
set global max_connections = 200
show variables like '%timeout%'命令可以查看Mysql中所有关于timeout的变量,如下图所示。

闲置连接(也就是上面状态为Sleep的连接)的超时时间由wait_timeout控制,默认8小时,可以通过set wait_timeout=60修改。
文章转载自波波的小书房,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




