这是我发送到 ZeroMQ 邮件列表的帖子的副本。然而,问题是它不是特定于 ZeroMQ 的,而是更普遍地涉及在 WinRT 中提供的网络功能上需要一个“映射”层,以便在针对 WinRT 编译时为 C++ 代码提供更正常的“伯克利套接字外观”:
大家好,我之前在 iPhone 和 Android 版本的移动应用程序中使用过 ZeroMQ(参见http://www.ibuzzedfirst.com),因为这些平台支持原生/C++/Socket 开发,因此支持 ZeroMQ。
对于 WindowsPhone 7.5 (OS 7.1) 版本,我必须从头开始重新实现任何所需的 ZeroMQ 功能,因为 WinPhone 7.5 只支持 C#,而不支持 C++(它实际上是一个 C# Silverlight 应用程序)。此外,WinPhone 7.5 仅提供其自己的 Socket 支持“版本”(http://msdn.microsoft.com/en-us/library/sb27wehh%28v=vs.95%29.aspx),仅支持异步版本的功能,例如 ConnectAsync、SendAync、ReceiveAsync 等。然而,缺乏 C++ 使这成为一个争论点。
因此,对于 WindowsPhone 7.5 版本,我仅将应用程序限制为“客户端”(参赛者)功能,并没有实现“服务器”(测验大师)部分。这是因为应用程序的客户端部分只向服务器发送和接收请求、回复和订阅,而服务器利用 ZeroMQ 固有的多线程多用户功能。重新创建 ZeroMQ 传输协议/标头以供客户端使用并使用 WindowsPhone Socket 支持来提供通信是(相对)简单的。
好的,现在我正在考虑将应用程序移植到 Windows 8 上的 WinRT。(首先是桌面/平板电脑版本 - Windows Phone 8 RT SDK 尚未推出,但会类似)。好消息是 WinRT 支持 C++,是的!(实际上,仍然没有那么简单,当只编写 C# 的 WinRT 应用程序时,您可以针对“AnyCPU”进行编译,只要包含 C++ 部分,您就必须构建 3 个不同的版本 - x86/Win32、x64 和ARM 版本,但这是一个不同的问题)。
不幸的是,像 Windows 7/8 Phone 一样,WinRT 不支持“普通”Berkeley Socket 访问,而是提供了自己的“版本”的 Socket 编程,具有用于不同套接字场景的离散类,例如用于连接 TCP 客户端的 StreamSocket(http ://msdn.microsoft.com/en-us/library/windows/apps/windows.networking.sockets.streamsocket.aspx#methods),用于可绑定 TCP 服务器的 StreamSocketListener(http://msdn.microsoft.com/en -us/library/windows/apps/windows.networking.sockets.streamsocketlistener.aspx#methods ),以及 UDP 版本的 DatagramSocket / DatagramSocketListener。此外,仅提供所有方法的异步版本。
所以看起来,为了让 ZeroMQ 在 WinRT 上成功编译,我将不得不编写一个 Facade 层来提供类似 Berkeley Socket 的 C++ 接口,并在下面执行必要的映射到 WinRT 提供的 Socket 编程版本.
有没有其他人开始这个旅程或写过类似的门面?有兴趣听听大家的想法,尤其是 WinRT 看起来相当“大事”!