gpt4 book ai didi

javascript - 有没有一种干净的方法来使用 thrift 定义事件?

转载 作者:行者123 更新时间:2023-11-30 07:55:44 26 4
gpt4 key购买 nike

在我的应用程序中,有几个组件将生成各种不同类型的应用程序特定事件。这些事件将发布给经纪人并传递给 N 个客户。其中一些客户端是我的服务器端应用程序中的其他 Java 类,但主要使用者是我基于 javascript 的 WebUI。

到目前为止,我当前的方法是定义一个抽象事件基类来封装一些公共(public)字段,然后为每个事件实现一个特定的事件类。

这一直工作得很好,除了现在我需要在 javascript 和 java 端维护该事件,以便任何一方都可以对其他事件使用react。

今天早上我有一个想法,我可以利用 Thrift(该项目已经大量使用它)来定义事件数据结构并自动生成两侧的类。这不仅处理了编写类文件的繁琐工作,而且确保了一致性。

我的问题是,由于 thrift 中的数据对象是结构(无法扩展),我无法封装公共(public)字段,也无法使用单个基类传递事件。

到目前为止,我想出的解决方法是在 thrift IDL 中定义一个结构体来充当“基”类,并为我定义的每个事件类型提供一个可选字段。这仍然让我有一个类来一般地引用事件,同时还让我在生成事件时捕获相关数据。

也许这只是我对thrift不太熟悉,但这感觉就像一个黑客。我是否离题了,或者这是一个不错的方法吗?有没有更好的方法来实现这一点?

最佳答案

Thrift 作为一种序列化和 RPC 机制,仅允许一对一连接,因此并不能真正解决任务。但你并没有迷失方向。

如果你想做一对多,你应该使用一些消息系统。 Thrift 可以轻松地与各个级别的消息传递系统相结合。 /contrib folder源代码树包含一些关于如何实现这一目标的示例。

使用 Thrift union 作为信封来保存所有各种数据结构是一个有效的解决方案,因为它允许最大限度地减少序列化和反序列化代码 - 您只需要一对函数来处理始终相同的 Envelope 结构(当然可能有不同的内容)。

struct Foo { ... some member fields ... }
struct Bar { ... some member fields ... }
struct Baz { ... some member fields ... }

union Envelope {
1: Foo foo
2: Bar bar
3: Baz baz
}

关于javascript - 有没有一种干净的方法来使用 thrift 定义事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32698551/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com