Socket.IO 用于客户端更新的基本无方法对象或完全装备的基于 class 的对象?
Socket.IO bare-bones no-method objects or fully-equipped class-based objects for client updates?
假设我的 Node 应用程序中有一个 players
数组,每个 player
都是一个对象。每次报价,我都会将我的数组发送给我的客户,Socket.IO。我不确定以下两种方法中最有效的方法是:
- 对于每个
player
,我将一个基本对象添加到我的数组中,例如 {id:1,x:10,y:20,color:"#000000"}
。然后我可以将整个原始数组发送给我的客户。我需要的函数是非对象特定的,并且处理已解析的对象。 Agar.io clone. 中使用了这个选项
- 对于每个
player
,我添加一个基于 Player
class 的对象,如 {id:1,x:10,y:20,color:"#000000",update:function(){//code},someOtherFunction:function(){//code}}
,然后创建一个伪对象的伪数组(如在选项 1) 中发送给我的玩家每个 tick。
如果有更好的选择,请列出。
您的应用中存储的数据应针对最佳编码风格进行优化。这意味着它应该是可读的、可维护的、可扩展的、健壮的等等...
通过传输发送的数据应该针对最高效的传输进行优化。
一个人不应该真正影响或驱动另一个人。如果两个不同的优先级导致不同的格式,那么您只需在发送数据或接收数据之前从一种转换为另一种。
考虑到所有这些,我认为您会希望在您的应用程序中使用面向对象的原则,以便玩家可以成为具有方法的实际对象。
然后,当您想要通过网络发送数据时,您只需提取要发送的任何数据,将其格式化为便于传输的格式并发送即可。然后接收方将解析数据并将其插入到对象中。
假设我的 Node 应用程序中有一个 players
数组,每个 player
都是一个对象。每次报价,我都会将我的数组发送给我的客户,Socket.IO。我不确定以下两种方法中最有效的方法是:
- 对于每个
player
,我将一个基本对象添加到我的数组中,例如{id:1,x:10,y:20,color:"#000000"}
。然后我可以将整个原始数组发送给我的客户。我需要的函数是非对象特定的,并且处理已解析的对象。 Agar.io clone. 中使用了这个选项
- 对于每个
player
,我添加一个基于Player
class 的对象,如{id:1,x:10,y:20,color:"#000000",update:function(){//code},someOtherFunction:function(){//code}}
,然后创建一个伪对象的伪数组(如在选项 1) 中发送给我的玩家每个 tick。
如果有更好的选择,请列出。
您的应用中存储的数据应针对最佳编码风格进行优化。这意味着它应该是可读的、可维护的、可扩展的、健壮的等等...
通过传输发送的数据应该针对最高效的传输进行优化。
一个人不应该真正影响或驱动另一个人。如果两个不同的优先级导致不同的格式,那么您只需在发送数据或接收数据之前从一种转换为另一种。
考虑到所有这些,我认为您会希望在您的应用程序中使用面向对象的原则,以便玩家可以成为具有方法的实际对象。
然后,当您想要通过网络发送数据时,您只需提取要发送的任何数据,将其格式化为便于传输的格式并发送即可。然后接收方将解析数据并将其插入到对象中。