Java - Socket.writeObject()非常慢

时间:2012-04-11 10:54:28

标签: java performance sockets multiplayer

您好我想告诉您我为我的游戏制作了多人游戏并且有效,但是从欧洲的一边到另一边,它需要8秒。没有太多要发送,它只发送一个具有float x,float y和String username的对象。

在服务器中我有3个线程:接受,发送,接收。客户端有发送和接收。

服务器的一部分发送:

oos = new ObjectOutputStream(new BufferedOutputStream(list_sockets.get(i).getOutputStream()));
int client_state = list_client_states.get(i);
oos.writeObject(client_state);
oos.flush();

oos = new ObjectOutputStream(new BufferedOutputStream(list_sockets.get(i).getOutputStream()));
oos.writeObject(list_data);
oos.flush();

它类似于客户端,这里是服务器的接收(也类似于播放器):

ois = new ObjectInputStream(list_sockets.get(i).getInputStream());
int receive_state = (Integer)ois.readObject();

ois = new ObjectInputStream(list_sockets.get(i).getInputStream());
DataPackage dp = (DataPackage) ois.readObject();

list_data.set(i,dp);

2 个答案:

答案 0 :(得分:0)

对于发送只包含2个浮点数和一个字符串的对象,如何进行序列化/反序列化将不会有太大的区别。当然它不会直接造成8秒的延迟。 (序列化格式的影响可能是几毫秒或更短,除非您使用的是真正低比特率的网络链接。)

我怀疑真正的问题是网络问题,或者(可能)代码中的某种同步错误,而您没有向我们展示。

答案 1 :(得分:0)

最好你可以使用时间戳来调试代码花费太多时间的地方。

long time=new Date().getTime();

System.out.prrintln(“Tme stamp”+(time / 1000));

通过这种方式,您可以在序列化或连接时调试耗时。