2

您好,我想告诉您,我为我的游戏制作了多人游戏并且它可以工作,但是从欧洲的一侧到另一侧,需要 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);
4

2 回答 2

0

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

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

于 2012-04-11T11:17:11.080 回答
0

更好的是,您可以使用时间戳来调试代码在哪里花费了太多时间。

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

System.out.prrintln("时间印记"+ (time/1000));

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

于 2012-12-27T09:34:56.007 回答