2

我正在实现一种 ruby​​ 在线终端(仅供练习)。我正在使用来自简单 js Web 应用程序的 AJAX 来调用评估“终端”输入的方法。为了避免环境问题并让用户创建自己的对象,我使用了“绑定”对象。问题是我不知道如何保持绑定。

我的第一个想法是创建一个绑定,每次用户访问应用程序时,它都会在帖子请求之间持续存在。在那一刻,使用唯一键和新绑定创建了一个键-对象对。然后将密钥传递给客户端。当用户通过 ajax 发送字符串进行评估时,我发送密钥。然后,我可以获取绑定对象并对其进行更新。

我试过类似的东西:

class TerminalController
    @@bindings = {}

    def index
        @token = keyToken
        @@bindings[@token] = getBinding
    end

    private

        def keyToken
            Digest::MD5.hexdigest(Time.now.to_s)
        end

        def getBinding
            # declare methods for all bindings
            # ...
            binding
        end
end

但是在执行时,代码无法创建键值对。事实上,我在该行之后尝试执行的任何操作都失败了。我不明白为什么。

实际上,我认为如果我可以序列化绑定它会起作用,但我认为它可能效率低下,因为网络延迟和绑定的可能增长。

4

1 回答 1

0

不幸的是,我认为在大多数 Ruby 实现中没有一种方法可以序列化绑定。如果您尝试 Marshal.dump 绑定,您会在 MRI 中收到 TypeError(Marshal是用于在 Ruby 中序列化对象的内置库)。

可能还有更多其他方法可以做您想做的事情。但是,如果您必须序列化绑定,请查看MagLev。该实现旨在使任何对象都可以持久化。

于 2011-11-07T19:17:54.603 回答