[英]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.