【发布时间】:2011-09-16 08:34:06
【问题描述】:
我正在用 java 做一个监听器并使用一个线程。这有效,它接收数据, 但是对于这个特定的侦听器,它接收数据的速度非常慢。我不明白这一点,因为这个 Java 侦听器对另一个客户端工作得非常快,当我使用 PHP 编写的侦听器用于同一源时,它接收数据的速度非常快。 为什么会有这种速度差异?
使用参数
客户端以字节数组发送数据
(实际数据为十六进制,转换成字节数组由客户端发送)
为什么我的 java 代码总是很慢?
我在这上面花了很多时间,发现 This JAVA Listener 对于 Tracker 设备来说很慢 但它适用于为定义端口和 IP 发送数据的临时客户端。 但是对于 Tracker 设备 PHP Listener 很快我不明白这一点 为什么这个追踪器设备会有这种速度差异 请帮忙
我的代码:
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.lang.ClassNotFoundException;
import java.lang.Runnable;
import java.lang.Thread;
import java.net.ServerSocket;
import java.net.Socket;
import java.sql.*;
import java.io.*;
import java.net.*;
import java.util.StringTokenizer;
import java.util.Calendar;
import java.util.Date;
import java.util.Arrays;
import java.util.logging.Logger;
import java.util.logging.Level;
import java.text.DecimalFormat;
import pack.*;
import java.lang.String;
import second.*;
public class ServerSocketExample {
private ServerSocket server;
private int port = 3333;
public ServerSocketExample() {
try {
server = new ServerSocket(port);
} catch(IOException e) {
System.out.println("errore on port");
e.printStackTrace();
}
}
public static void main(String[]args) {
ServerSocketExample example = new ServerSocketExample();
example.handleConnection();
}
public void handleConnection() {
System.out.println("Waiting for client message...");
//
// The server do a loop here to accept all connection initiated by the
// client application.
//
while (true) {
try {
Socket socket = server.accept();
new ConnectionHandler(socket);
}
catch(IOException e) {
e.printStackTrace();
}
}
}
}
class ConnectionHandler implements Runnable {
private Socket socket;
static int count = 0;
public ConnectionHandler(Socket socket) {
this.socket = socket;
Thread t = new Thread(this);
t.start();
}
public void run() {
String input = null;
try {
int i = 0;
InputStream in = socket.getInputStream();
DataInputStream dis = new DataInputStream(in);
byte[]data = new byte[42];
int len = dis.read(data);
socket.close();
System.out.println("Message ");
}
catch(Exception e) {
e.printStackTrace();
}
}
}
【问题讨论】:
-
一些代码sn-ps会很有用
-
SO 不容忍名称调用——称之为“特殊”数据... :)
-
您是否验证这不是各种客户端和服务之间的不同网络速度的问题,尤其是在您有多个部署主机的情况下?很容易错过这样明显的事情……
-
一个想法:这可能是一种愚蠢的读取方式(即每个字节单独或这样),而不是读取更大的块或 BufferedInputStream。但是是的,请出示您的阅读代码。
-
没有代码,故事模糊..请改写这个答案!?
标签: java performance sockets networking