java - Kryonet:注册的类(class)必须相同吗?

标签 java networking serialization packet kryonet

我正在通过 kryonet 发送一些仅包含“实体”变量的数据包。我自己创建了实体类。问题是,注册实体类时,服务端和客户端的类文件并不完全相同。

在客户端,我没有包含一些方法,因为它们依赖于访问仅服务器端的变量,并且我完全删除了所有构造函数,因为客户端不会创建实体,服务器会。在服务器范围内,我省略了渲染方法,因为服务器不会渲染。

有哪些方法和构造函数真的很重要吗? kryonet 是否只查看变量是否相同(因为它们是相同的)?谢谢!

顺便说一句,如果您想知道,实体是一种抽象方法,因此当我创建新类型的实体(例如“玩家”)时,它们会扩展它并添加更多方法和变量。我希望这也可以通过数据包发送。

最佳答案

我不确定你在问什么,但据我所知,我会尽力回答你的问题。

所以我认为你想要做的是你有一个名为 Entity 的基类,并将其扩展到不同的类。您在类中实现一些方法,这些方法将发送到客户端,一些方法将发送到服务器。

所以当你问有什么方法和构造函数重要时,答案是否定的。直到您有一个空的构造函数(Kryo 序列化程序所需)为止,kryonet 都可以使用您拥有的任何构造函数。只是你需要确保你有一个空的构造函数。我在 kryonet 中有很多类,有超过 2 个构造函数,它们工作得很好。

提示,由于您是在网络上发送数据,如果我是您,我会删除所有不会在客户端中使用的数据变量,并进一步抽象出类。

另外,为什么要在类中发送方法?只是好奇。我认为你应该在服务器和客户端中有方法,并且应该从数据包(类)中取出数据,然后将其发送到服务器或客户端中的方法。

如果有任何不清楚的地方请告诉我。

关于java - Kryonet:注册的类(class)必须相同吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27859797/

相关文章:

javascript - 使用serialize()函数发送表单并在ajax()中发送额外数据

java - 线程.sleep(); java 语

java - 在 linux 中设置 java_home 和 path 环境变量

ios - 在iOS 10更新后Ping导致“主机已关闭”(但不是!)错误

python - 如何从同一网络上的另一台计算机访问本地主机?

python-3.x - Python Diffie-Hellman 交换密码库。共享 key 不相同

c# - 进行语言间数据交换的优雅方式

java - 出现类似java.lang.String的错误不是double模式的有效外部类型在下面的代码中

java - 如何禁用 Spring Boot 控制台的登录

c - ARP 的编程使用