您好我想告诉您我为我的游戏制作了多人游戏并且有效,但是从欧洲的一边到另一边,它需要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);
答案 0 :(得分:0)
对于发送只包含2个浮点数和一个字符串的对象,如何进行序列化/反序列化将不会有太大的区别。当然它不会直接造成8秒的延迟。 (序列化格式的影响可能是几毫秒或更短,除非您使用的是真正低比特率的网络链接。)
我怀疑真正的问题是网络问题,或者(可能)代码中的某种同步错误,而您没有向我们展示。
答案 1 :(得分:0)
最好你可以使用时间戳来调试代码花费太多时间的地方。
long time=new Date().getTime();
System.out.prrintln(“Tme stamp”+(time / 1000));
通过这种方式,您可以在序列化或连接时调试耗时。