2011-04-29 155 views
10

我们在Haskell有一个很大的控制台应用程序,我负责制作跨平台并添加一个gui。使用ZeroMQ进行跨平台开发?

的要求是:

  1. 本机作为-可能的外表和感觉。
  2. 客户端适用于Windows和Mac OS X,如果可能,Linux。
  3. 没有单独的运行时间来安装。
  4. 没有必要的网络通信。 haskell代码处理非常敏感的信息,无法通过线路传输。这真的是这不是一个Web应用程序的唯一原因。

现在,这个问题的真正原因是为了解释我目前正在研究的一个解决方案,并征求我没有想到的原因,这使得这是一个坏主意。

我的解决方案是一个本地gui。 Windows上的Winforms,Mac OS X上的Cocoa和Linux上的GTK/Glade,它们只是简单地处理演示文稿。然后,我会在Haskell代码的顶部编写一个图层,将其变为使用ZeroMQ来处理消息的UI和来自UI的消息的响应者,以及可能来回序列化数据的protobufs。所以本地应用程序将启动它本身启动所有魔法发生的守护进程,并且来回发送消息。

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

我在想什么,这是一个坏主意?

我或许应该提到,乍看之下,我打算在所有平台上使用GTK。问题在于,虽然它很接近,并且GTK和Glade支持Haskell很适合使用,但结果看起来并不“正确”。它很接近,但只是微妙的方式不足以让那些碰巧正在为这项工作写检查的人无法接受这种解决方案。

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

回答

8

然后,我会写在Haskell代码即把它变成 的消息,并从使用ZeroMQ处理 消息UI应答的顶部上的层,也许protobufs用于序列化的数据来回。

我觉得这是合理(客户端/服务器模型,其中客户端只是 恰好是本机的外观正感受桌面应用程序)。 (关于protobufs和JSON,thrift,我没有强烈的观点 )。

Haskell zeromq bindings现在也有一些使用 。

我在想什么,这是不是一个坏主意?

在Windows和Mac上对zeromq进行了很好的测试?这可能是好的,但我会检查一下 。

的问题是,虽然已经很接近了,而对于 哈斯克尔GTK和Glade的支持是好的工作,结果不看“右”。

integration package帮助 那里吗?

-2

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

如果您的应用程序非常敏感,您应该将DEFINITELLY放在服务器上,并尽可能使用最强的TLS

4

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

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

+0

我用hack-handler-webkit或类似的东西搞砸了很久。它工作得很好。只要有空闲时间,我一定会研究这个。谢谢(你的)信息! – clintm 2011-05-04 23:07:47

0

我有一些问题得到zeromq与OSX上的哈斯克尔很好(与寻找一个dylib相对于我认为的“o”问题)。协议缓冲区和haskell似乎工作正常。