我試圖提高套接字傳輸信息的速度,但我不確定如何去做。代碼的傾向是傳遞一個數字,日期和一個以字符串形式發送的簡短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雖然代碼不會在任何特定區域緩慢,但它應該處理兩個數據庫之間的通信,並且它目前每秒處理大約350個事務。我試圖加倍該即時通訊,目前正致力於改進程序的其餘部分,但是我正在尋求幫助特別是由於我缺乏經驗而導致的插座面積。我會定義你的建議。謝謝 – slayeroffrog