繁体   English   中英

Java-Socket.writeObject()确实很慢

[英]Java - Socket.writeObject() is really slow

您好,我想告诉您,我为自己的游戏制作了多人游戏,并且可以运行,但是从欧洲一侧到另一侧,这需要8秒钟。 没有太多要发送的内容,它仅发送具有float x,float y和String用户名的对象。

在服务器中,我有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个浮点数和一个String的对象,序列化/反序列化的方式不会产生太大差异。 当然,它不会直接导致8秒钟的延迟。 (除非您使用的比特率非常低,否则串行化格式的影响可能会在几毫秒或更短的时间内。)

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

更好的是,您可以使用时间戳来调试确切的代码所花费的时间。

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

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

这样,您可以调试耗时的序列化或建立连接。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM