我的应用程序使用套接字和线程发送接收到连接到它的客户端的实时数据。为此,步骤如下:
从源接收的数据存储在等待线程处理的数组中。 在每个客户端线程中,接收的数据也存储在要发送的数组中。 这样做的目的是在接收或发送数据时不会发生堵塞。 数据延迟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) {
}
}
感谢。
答案 0 :(得分:0)
根据您发送的数据量,可能是您处理流的方式。
c = sIn.read()
一次只读取几个字节。尝试使用BufferedReader并使用readLine()
进行包装。 BufferedReader一次读取几kb,效率更高。 readLine()
也会将输入分解为行,这会稍微简化代码。
在客户端连接上,PrintWriter可以帮助您一次输出整行。