Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/348.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 是否有一个干净的方法来定义事件使用节俭?_Javascript_Java_Events_Thrift - Fatal编程技术网

Javascript 是否有一个干净的方法来定义事件使用节俭?

Javascript 是否有一个干净的方法来定义事件使用节俭?,javascript,java,events,thrift,Javascript,Java,Events,Thrift,在我的应用程序中,有几个组件将生成各种不同类型的应用程序特定事件。这些事件将发布到代理,并交付给N个客户端。其中一些客户机是我的服务器端应用程序中的其他Java类,但主要消费者是我的基于javascript的WebUI 到目前为止,我的当前方法是定义一个抽象事件基类来封装一些公共字段,然后为每个事件实现一个特定的事件类 这一直运行良好,除了现在我需要在javascript和java端维护事件,以便任何一方都可以对其他事件做出反应 今天早上我有一个想法,我可以利用Thrift(项目已经大量使用了T

在我的应用程序中,有几个组件将生成各种不同类型的应用程序特定事件。这些事件将发布到代理,并交付给N个客户端。其中一些客户机是我的服务器端应用程序中的其他Java类,但主要消费者是我的基于javascript的WebUI

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

这一直运行良好,除了现在我需要在javascript和java端维护事件,以便任何一方都可以对其他事件做出反应

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

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

到目前为止,我提出的解决方法是在thrift IDL中定义一个结构作为“基类”,为我定义的每个事件类型都提供一个可选字段。这仍然允许我有一个类来泛指事件,同时也允许我在生成事件时捕获相关数据


也许这只是因为我不太熟悉节俭,但这感觉像是一个黑客。我是不是走得太远了,还是这是一个不错的方法?有没有更好的方法来实现这一点?

节俭作为一种序列化和RPC机制,只允许一对一的连接,因此无法真正解决这一任务。但你没有迷路

如果你想做一对多,你应该使用一些消息系统节俭可以很容易地与不同级别的消息传递系统结合。源代码树的部分提供了一些如何实现这一点的示例

使用节俭的
联合
作为信封来保存所有不同的数据结构是一个有效的解决方案,因为它允许最小化序列化和反序列化代码-您只需要一对函数来处理始终相同的
信封
结构(当然可能有不同的内容)


我真希望我曾经考虑过这个问题,因为这个答案正是我想要的。现在,我只希望我没有花两天的大部分时间使用反射来滚动我自己的Java->Typescript类生成器。但嘿,至少很有趣:)
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
}