优化套接字java中的性能

时间:2012-05-30 09:31:45

标签: java performance sockets

我的应用程序使用套接字和线程发送接收到连接到它的客户端的实时数据。为此,步骤如下:

  • 连接到数据服务器,然后等待客户端
  • 启动一个线程来讨论传入的数据,格式化它们并将它们发送给客户(如果有的话)。
  • 当客户端连接时,它会为他打开一个线程,通过该线程发送数据。
  • 最后,使用另一个线程来测试您正在接收和发送数据,否则它将重新连接到源。

从源接收的数据存储在等待线程处理的数组中。 在每个客户端线程中,接收的数据也存储在要发送的数组中。 这样做的目的是在接收或发送数据时不会发生堵塞。 数据延迟10秒或更长时间以吸引客户

我可以做些什么来优化性能? 这是在Windows服务器上运行,你能推荐任何探查器吗?

非常感谢你的帮助。

编辑: 数据是可变长度的字符串。 代码的一部分是: //在类中创建源套接字实现Runnable然后等待客户端

Socket entrada = new Socket(servidor,Integer.parseInt(puerto));
InputStream sIn = entrada.getInputStream();  
        while (!error) {  
          try {
              s = salida.accept();
              clientes.add(new ClientThread(s));              
// run
while (((c = sIn.read()) != -1) && ((clientes.size() > 0))) {
if (c != 13 && c != 10) {
cad += (char) c;
}
if (c == 13) received[i] = cad

// In SendThread, run
// format received[i] and send result
for (i=0; i < clientes.size(); i++) {
  clientes.get(i).SendData(result);
}


// In ClientThread:
OutputString s1out = socket.getOutputStream();
// SendData
sending[i] = result;
// run
if cad forsending
              for (int j = 0;j<res.length();j++){
                try {
                    s1out.write((int)res.charAt(j));          
                  } catch (Exception e) {
                  }
              }

感谢。

1 个答案:

答案 0 :(得分:0)

根据您发送的数据量,可能是您处理流的方式。

c = sIn.read()一次只读取几个字节。尝试使用BufferedReader并使用readLine()进行包装。 BufferedReader一次读取几kb,效率更高。 readLine()也会将输入分解为行,这会稍微简化代码。

在客户端连接上,PrintWriter可以帮助您一次输出整行。