使用ZeroMQ进行跨平台开发?

10
我们有一个大型的Haskell控制台应用程序,我被委托使其跨平台并添加GUI界面。要求如下:
  1. 尽可能本地化外观和感觉。
  2. 客户端需要支持Windows和Mac OS X,如果可能还有Linux。
  3. 不需要单独安装运行时。
  4. 不需要网络通信。 Haskell代码处理非常敏感的信息,不能通过网络传输。 这实际上是这不是Web应用程序的唯一原因。
现在,这个问题的真正原因是解释我正在研究的方案,并征求我没有考虑到的使其成为坏主意的原因。
我的解决方案是本地GUI。在Windows上使用Winforms,在Mac OS X上使用Cocoa,在Linux上使用GTK / Glade,仅处理演示文稿。然后,我会编写一个层,将其转换为对UI的消息进行响应的Haskell代码,并使用ZeroMQ来处理消息,也许使用protobuf来序列化来回传输的数据。因此,本地应用程序将启动,它自己启动所有魔法的守护程序,并发送消息来回传递。
除了确保守护程序仅接受来自启动它的应用程序的连接以及提供适当的数据来回传递高级GUI元素(例如表视图和单元格)之外,我没有看到太多的缺点。
那么我没有考虑到什么使它变成个不好的主意呢?
我应该提到,乍一看我会在所有平台上使用GTK。问题是,尽管它很接近,并且Haskell对GTK和Glade的支持很好,但结果看起来并不“正确”。 它接近,但在微妙的方式中却不足以满足正在为此工作付款的人的要求,因此这种解决方案是不可接受的。
此外,多个平台及其多个GUI语言的问题不是问题,因此我不需要寻找解决该问题的其他方法,除非它简化了与Haskell代码之间的交互。
4个回答

8
然后我会在Haskell代码之上编写一层,将其转换为使用ZeroMQ作为消息的响应器,用于处理UI的消息,可能使用protobufs进行数据的序列化和反序列化。
我认为这是合理的(客户端/服务器模型,其中客户端只是本地外观和感觉的桌面应用程序)。 (我对protobuf与JSON、thrift等没有强烈的看法)。
Haskell zeromq绑定现在也有一些用途。
我没有考虑过这个想法不好的方面是什么?
zeromq在Windows和Mac上测试得如何?它可能很好,但我会检查一下。
问题是,虽然它很接近,但是Haskell的GTK和Glade支持很好,但结果看起来不“正确”。 integration package是否有助于解决这个问题?

4

这里有一个有趣的可能性:wai-handler-webkit。它基本上将QtWebkit与Warp Web服务器打包在一起,使您的Web应用程序可以部署。它尚未经过深入使用,在Mac上从未经过测试,并且在Windows上编译起来很棘手,但它是一种相当直接的方法,可以让您使用Haskell中正在开发的相当丰富的Web生态系统。

我很可能会在不久的将来在其上进行更多的开发,因此如果您有兴趣使用它,请告诉我哪些额外功能会很有用,以及如果您能提供任何关于Mac方面的帮助。 我也不确定我们是否需要在所有平台上坚持使用QtWebkit:根据操作系统使用不同的Webkit后端或甚至使用Gecko或(颤抖)Trident可能更有意义。


我之前曾经花了一些时间来尝试hack-handler-webkit或类似的东西,效果还不错。只要我有空,我一定会去研究一下这个。谢谢你提供的信息! - clintm

0

我在OSX上使用haskell时遇到了一些问题,无法很好地与zeromq配合(我认为是寻找dylib而不是“o”的问题)。但是,协议缓冲区和haskell似乎可以正常工作。


-1

所以你不使用Web应用程序的原因是因为Haskell程序输出的性质敏感。而这就是为什么你要在所有客户端机器上分发同样会喷出未加密数据的敏感应用程序?这没有任何意义。

如果你的应用程序很敏感,你一定应该将其放在服务器上,并利用最强大的TLS


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接