- 注册
- 2025/01/11
- 消息
- 6
- 金粒
- 281金粒
本服务器运行这经过修改的Spigot1.8.8核心,并且在CraftPlayer中添加了getPrefix、getSuffix、getGroup方法以便我们的开发者更容易的开发。
但是如果在一个子服务器中,服务器中人较多(大于10人),此时进入服务器就会卡顿,然后才会好,卡顿时长与当前服务器内玩家人数成正比例关系。
我们使用了HikariCP作为连接池。
以下是获取Prefix代码,其他与其类似:
一下是对连接池的配置:
除了通过异步获取还有更好的解决方案吗?
但是如果在一个子服务器中,服务器中人较多(大于10人),此时进入服务器就会卡顿,然后才会好,卡顿时长与当前服务器内玩家人数成正比例关系。
我们使用了HikariCP作为连接池。
以下是获取Prefix代码,其他与其类似:
Java:
@Override
public String getPrefix() {
try (Connection connection = Bukkit.getSugar().getLemonPermsDatabase().getDataSource().getConnection();
Statement statement = connection.createStatement()) {
ResultSet rs = statement.executeQuery("SELECT * FROM player_data WHERE uuid = '" + getUniqueId() + "'");
if (rs.next()) {
if (rs.getString("prefix") != null) {
return rs.getString("prefix");
} else {
return getGroup().getPrefix();
}
} else {
statement.executeUpdate("INSERT INTO player_data (uuid, name, group_name) VALUES ('" + getUniqueId() + "', '" + getName() + "', '默认')");
return getGroup().getPrefix();
}
} catch (SQLException e) {
e.printStackTrace();
}
return new Group("默认").getPrefix();
}
一下是对连接池的配置:
Java:
public Database(String url, int port, String db, String username, String password){
HikariConfig APIConfig = new HikariConfig();
APIConfig.setJdbcUrl("jdbc:mysql://" + url + ":" + port + "/" + db);
APIConfig.setUsername(username);
APIConfig.setPassword(password);
APIConfig.addDataSourceProperty("verifyServerCertificate", String.valueOf(false));
APIConfig.addDataSourceProperty("characterEncoding", "utf8");
APIConfig.addDataSourceProperty("encoding", "UTF-8");
APIConfig.addDataSourceProperty("useUnicode", "true");
APIConfig.addDataSourceProperty("rewriteBatchedStatements", "true");
APIConfig.addDataSourceProperty("jdbcCompliantTruncation", "false");
APIConfig.addDataSourceProperty("cachePrepStmts", "true");
APIConfig.addDataSourceProperty("prepStmtCacheSize", "275");
APIConfig.addDataSourceProperty("prepStmtCacheSqlLimit", "2048");
APIConfig.addDataSourceProperty("socketTimeout", String.valueOf(TimeUnit.SECONDS.toMillis(30)));
APIConfig.setMaximumPoolSize(50);
dataSource = new HikariDataSource(APIConfig);
}
除了通过异步获取还有更好的解决方案吗?