0

我有以下课程。

class User 
{
    constructor( username )
    {
        this._username = username;  
    }

    get username()
    {
        return this._username;
    }
}

当我实例化一个用户对象并通过网络发送它时,它说myUserObject.username当我尝试在接收端访问它时它是未定义的,但myUserObject._username确实包含我在发送者中设置的值。我正在使用基于 zeromq 和 messagepack 的 zerorpc。有什么我可以添加或做不同的事情来完成这项工作吗?普通类函数也会出现此问题。现在,我的临时解决方案是通过将有缺陷的对象传入构造函数并重新分配字段来在接收端重新创建对象。

发件人:

import User from './User.js'
const client = new zerorpc.Client();

//code for client to connect

function createUser()
{
    let user = new User( "kacy" );
    console.log( user.username ); //kacy
    client.invoke( 'createUser', user, someCallback );
}

接收者:

import User from './User.js'

createUser( user )
{
    console.log( user._username ); //kacy
    console.log( user.username ); //undefined
    let user2 = new User( user._username );
    console.log( user2.username ); //kacy
}
4

1 回答 1

1

zerorpc 不会通过网络发送代码。username()是一个函数,不会通过网络发送,while_username是一个属性。zerorpc 可以发送任何类似 json 的数据类型,不多也不少。

我能想到这个限制背后的几个原因:

  • 发送代码是安全风险的简单途径(实际上是远程代码注入)
  • 与惰性数据相比,代码具有挑剔的行为,这使得以非常微妙的方式破坏客户端/服务器之间的契约变得更加容易
  • 跨语言发送代码绝对不容易(因为 zerorpc 旨在成为多语言)。这将需要一种通用的解释语言(例如lua)。
  • 如果您不担心后果,请随时以文字形式发送代码,并将eval()其发送到另一端
于 2016-07-25T18:19:35.443 回答