java socket server一问
最近在优化一个系统。情况如下
1、服务器端采用java开发,serversocket接收客户端的业务请求,业务受理完成后回包给客户端
2、客户端由delphi开发。有N个客户端
3、发送的业务报文大概会600字节
4、终端会有同时向服务器端发包的情况
5、服务器端采用多线程serversocket,但有同步锁
目前发现故障点如下
偶尔客户端发送的包服务器端会收不到(大概20000个业务包,会有80个丢包),但是客户端socket发送返回值,是正常发送的状态。就是意味着发送端应该没有问题。
刚开始以为是服务器端缓冲区过小的问题。服务器端改到100k的缓冲区但问题未得到解决。
目前怀疑
1、是否是因为服务器的同步锁引起丢包?
2、是否发送的报文过大引起?
serversocket代码片断如下:
public void run() {
try {
sSocket = new ServerSocket(port, 30);
sSocket.setReceiveBufferSize(100*1024);
while (!exit) {
try {
while (!exit) {
Socket socket = sSocket.accept();
socket.setReceiveBufferSize(100*1024);
synchronized (sList) {
if (sList.size() >= maxConnections) {
socket.close();
System.out.println("List out of bound");
} else {
socket.setSoTimeout(300 * 1000);
TradeProc pthread = new TradeProc(
socket, stList);
Thread thread = new Thread(pthread);
thread.start();
}
}
}
} catch (Exception e) {
sSocket.close();
}
sSocket = new ServerSocket(port, maxConnections);
synchronized (sList) {
sList.clear();
}
}
} catch (Exception e) {
System.out.println(e.getMessage());
}
}