我创建了一个基于Java的服务器,它将侦听来自客户端的数据。 当服务器接收数据时,它必须解析它和它。在数据库中更新它。 客户端非常频繁地发送数据说每2-3秒&客户数量可以从200-1000。 我所做的是Server正在持续监听来自客户端的数据。 当它接收数据时,它启动一个新线程(将是每个客户端的独立线程),它解析数据和数据。在数据库中更新它。 我只使用一个与数据库的连接来更新每个客户的信息 问题有时是先前的请求没有完成&客户端发送另一个请求,当我为所有客户端使用相同的数据库连接时,其他客户端也会增加。
我需要建议提高性能,我是否应该为每个客户创建单独的连接,否则我该怎么办?
编辑: - 任何人请帮助代码。 说如果我正在处理发送数据的600-700客户端&根据请求为每个客户创建单独的线程。然后打破它。那么我的数据库池大小应该是多少? 更多线程也在并行运行,这与数据库建立了连接。我是否需要等待如果正在处理客户端数据。但就我而言,我无法保存客户数据。我该如何处理? 请建议。
答案 0 :(得分:1)
事先创建连接池。每当有新请求到来时,为该请求提供免费连接。这样,您就不会动态连接/断开连接,仍然可以获得连接可用性。
答案 1 :(得分:0)
你必须使用poolable连接数据库和线程池来使用它。
对于poolable连接,您可以使用Apache DBCP,查看configuration options
以下是示例用法
<table id="ticketTable">
<tr><td>
<select id="ticketSelect1">
<option priceValue1="120" value="1" selected>Adult</option>
<option priceValue1="110" value="2">Student</option>
</select>
</td>
<td style="text-align:right"><span id="price1">120</span></td>
</tr>
<tr><th>Typ lístku</th><th style="text-align:right">Cena</th></tr>
<tr><td><select id="ticketSelect2">
<option priceValue2="120" value="1" selected>Adult</option>
<option priceValue2="110" value="2">Student</option>
</select></td><td style="text-align:right"><span id="price2">120</span></td></tr>
</table>
<script type="text/javascript">
$(document).ready(function(){
$("table tr td #ticketSelect1").change(function() {
$('#price1').text($('option:selected').attr('priceValue1'));
}).change();
$("table tr td #ticketSelect2").change(function() {
$('#price2').text($('option:selected').attr('priceValue2'));
}).change();
});
</script>
对于线程池,您可以使用ExecutorService
它有以下方法
BasicDataSource ds = new BasicDataSource();
ds.setDriverClassName(JDBCDriver);
ds.setUrl(JDBCUrl);
ds.setUsername(JDBCUser);
ds.setPassword(JDBCPassword);
ds.setInitialSize(initSize);
ds.setMaxTotal(maxTotal);//negative for no limit
ds.setTestOnBorrow(false);
ds.setTestWhileIdle(true);
Connection con = ds.getConnection();
以下是样本用法
execute(Runnable)
submit(Runnable)
submit(Callable)
invokeAny(...)
invokeAll(...)
现在无论向ExecutorService提交多少个Runnable,它一次只能运行10个。