1

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

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

从源接收到的数据存储在一个等待线程处理的数组中。在每个客户端线程中,接收到的数据也存储在要发送的数组中。这样做的目的是在接收或发送数据时不会出现阻塞。数据延迟 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) {
                  }
              }

谢谢。

4

1 回答 1

0

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

c = sIn.read()一次只读取几个字节。尝试用BufferedReader包装它并使用readLine(). BufferedReader 一次读取几 kb,效率更高。readLine()还将为您将输入分成几行,这将在一定程度上简化代码。

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

于 2012-05-30T12:19:18.413 回答