【发布时间】:2017-12-20 01:28:23
【问题描述】:
以下实现了通过 ObjectOutputStream 发送的更新对象(在这种情况下使用套接字),但它必须每次都完全重写对象以更新另一端的对象,因为否则对象使用引用旧的反向引用对象已发送并且不查看新对象。我不知道如果这样的东西每秒更新几次会不会出现性能问题,但是有什么方法可以更有效地做到这一点?
ObjectOutputStream objectOS = new ObjectOutputStream(connectionSocket.getOutputStream());
while(true){
objectOS.reset(); // Disgregard any objects already written to stream
System.out.println(kingBob.currentAge);
objectOS.writeObject(kingBob);
System.out.println("Update HP");
kingBob.updateCurrentAge(keyboard.nextInt());
}
【问题讨论】:
-
无需为了检查状态变化而每秒多次重新发送整个对象。特别是对于高吞吐量的游戏网络,你真的应该只发送一个轻量级的信号来通知对方需要更新状态。
-
@Vince Emigh,不是发送整个对象,而是发送需要更新的字段?
-
发送一个操作码(通常是一个数字),通知对方需要做什么。每一方都会监听符合协议的操作码。如果客户端想要告诉服务器更新年龄,它会发送“更新年龄”操作码(例如,
0)。服务器将收到操作码。根据操作码,服务器将自行设置为读取更多数据(例如年龄本身)。不要为此使用对象流。 -
@VinceEmigh 谢谢!
标签: java sockets serialization objectoutputstream backreference