소켓 전송 정보 속도를 향상시키려는 시도가 있지만이를 수행하는 방법을 잘 모르겠습니다. 코드의 목적은 숫자, 날짜 및 문자열 형식으로 전송되는 짧은 xml을 전송하는 것입니다. Java 소켓에서 통신 속도 향상
이
에 서버 코드import java.net.*;
import java.io.*;
public class SSocket extends Thread
{
private ServerSocket serverSocket;
public SSocket(int port) throws IOException
{
serverSocket = new ServerSocket(port);
serverSocket.setSoTimeout(100000);
}
public void run()
{
System.out.println("Waiting for client on port " + serverSocket.getLocalPort() + "...");
while(true)
{
try
{
Socket server = serverSocket.accept();
DataInputStream in = new DataInputStream(server.getInputStream());
int cor=in.readInt();
int i=0;
String transaccion = in.readUTF();
String fecha = in.readUTF();
System.out.println(cor);
System.out.println(transaccion);
System.out.println(fecha);
DataOutputStream out =
new DataOutputStream(server.getOutputStream());
if(transaccion!=null && fecha != null && cor>0){
out.writeInt(cor);
}
else {
out.writeInt(-1);
}
if (i==100){
out.flush();
i=0;
}
i++;
server.close();
}catch(SocketTimeoutException s)
{
System.out.println("Socket timed out!");
break;
}catch(IOException e)
{
e.printStackTrace();
break;
}
}
}
public static void main(String [] args)
{
int port = 1337;
try
{
Thread t = new SSocket(port);
t.start();
}catch(IOException e)
{
e.printStackTrace();
}
}
}
입니다
클라이언트의 코드가
import java.net.*;
import java.io.*;
public class ClientSocket
{
public static void send(int correl, String transaccion, String fecha)
{
String serverName = "localhost";
int port = 1337;
try
{
Socket client = new Socket(serverName, port);
int i=0;
OutputStream outToServer = client.getOutputStream();
DataOutputStream out =
new DataOutputStream(outToServer);
out.writeInt(correl);
out.writeUTF(transaccion);
out.writeUTF(fecha);
InputStream inFromServer = client.getInputStream();
DataInputStream in =
new DataInputStream(inFromServer);
int corin=in.readInt();
if(corin>0){
Envio.updater(corin);
}
else {
}
if (i==100){
out.flush();
i=0;
}
i++;
client.close();
}catch(IOException e)
{
e.printStackTrace();
}
}
}
내가 이잖아요에 약간의 독서를 완료하고 그것을 추적 할 수없는 가망 솔루션 중 하나 버퍼를 사용하는 것 같다 또는 데이터 그램으로 이동하십시오. 그러나 소켓 작업에 대한 나의 경험은 제한적이며,이 상황에서 사용하는 것이 가장 좋을지 확신 할 수 없거나 다른 옵션이 있다면 고려하지 않을 것입니다. 이 코드는 많은 트랜잭션을 이동시킬 것이고 나는 짧은 시간 안에 그것을 가능하게하려고한다. 미리 감사드립니다.
ps. 내 나쁜 영어에 대한 미안 해요 내 모국어가 아니야
코드가 "느리게"보이나요? –
쉬운 일은'setTcpNoDelay (false)'입니다. 그것은 보내기 전에 소켓이 어떤 데이터를 버퍼링하는지 확인해야합니다. –
@DavidEhrmann 코드가 특정 영역에서 속도가 느려지는 동안 두 데이터베이스 간의 통신을 처리하기로하고 현재 Sencond 당 약 350 건의 트랜잭션을 처리하고 있습니다. 현재 IM을 두 배로 늘리려고하고 있지만 현재 프로그램의 나머지 부분을 개선하는 데 노력하고 있습니다. 특히 내 경험 부족으로 인해 소켓 영역. 나는 분명히 당신의 충고를 시도 할 것입니다. 고맙습니다. – slayeroffrog