使用ZeroMQ进行跨平台开发?

时间:2011-04-29 16:15:43

标签: user-interface haskell cross-platform zeromq

我们在Haskell中有一个大型控制台应用程序,我负责制作跨平台并添加gui。

要求是:

  1. 原生外观。
  2. 适用于Windows和Mac OS X的客户端,如果可能的话,还可以使用Linux。
  3. 无需安装单独的运行时。
  4. 无需网络通讯。 haskell代码处理无法通过网络传输的非常敏感的信息。这实际上是这不是Web应用程序的唯一原因。
  5. 现在,这个问题的真正原因是要解释我目前正在研究的一个解决方案,并且因为我没想到的原因而征求这个问题。

    我的解决方案是原生的gui。 Windows上的Winforms,Mac OS X上的Cocoa和Linux上的GTK / Glade,它们只处理演示文稿。然后我会在Haskell代码之上编写一个层,使用ZeroMQ来处理消息以及用于来回序列化数据的protobuf,将它转换为来自UI的消息的响应者。因此,本机应用程序将启动,它本身将启动所有魔法发生的守护进程,并来回发送消息。

    除了确保守护进程只接受来自启动它的应用程序的连接,以及为高级gui元素(我正在考虑表视图,单元格等)来回提供正确数据的挑战,我不要看到很多缺点。

    我没想到的是什么让这个坏主意?

    我应该提一下,乍一看我会在所有平台上使用GTK。问题在于,虽然它很接近,并且对Haskell的GTK和Glade支持很好用,但结果看起来并不“正确”。它很接近,但只是不能以微妙的方式本地化,这使得那个碰巧为这项工作写支票的人不能接受这个解决方案。

    此外,多个平台的问题以及因此gui的多种语言不是问题所以我不一定在寻找解决该问题的其他方法,除非它简化了与haskell代码的互操作。

4 个答案:

答案 0 :(得分:8)

  

然后我会在Haskell代码的顶部写一个层,将其转换为   使用ZeroMQ来处理来自UI的消息的响应者   用于来回串行化数据的消息和protobufs。

我认为 是合理的(客户端/服务器模型,客户端只是 碰巧是一个原生的看起来感觉桌面应用程序)。 (我没有强烈的看法 关于protobufs与... JSON,节俭)。

Haskell zeromq bindings正在获得 现在也有用。

  

我没想到的是什么让这个坏主意?

Windows和Mac上zeromq的测试结果如何?这可能很好,但是 我要检查的东西。

  

问题是,虽然它很接近,但GTK和Glade支持   Haskell很高兴能够使用,结果看起来并不合适。

integration package是否有帮助? 有?

答案 1 :(得分:4)

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

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

答案 2 :(得分:0)

我遇到了一些问题,让zeromq在OSX上与haskell玩得很好(寻找dylib的问题,而不是我认为的“o”)。协议缓冲区和haskell似乎工作正常。

答案 3 :(得分:-2)

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

如果您的应用程序是敏感的,那么DEFINITELLY应该将其放在服务器上并尽可能利用TLS

相关问题