伯克利WinRTsockets外观networking合理性?

这是我发送到ZeroMQ邮件列表的post的副本。 然而,这个问题并不是ZeroMQ所特有的,而是更一般地说,在WinRT中提供的networkingfunction上需要一个“映射”层,以便在针对WinRT编译时为C ++代码提供更加正常的“伯克利套接字外观”:

大家好,我以前在iPhone和Android版本的移动应用程序(见http://www.ibuzzedfirst.com )中使用了ZeroMQ,因为这些平台支持native / C ++ / Socket开发,因此也支持ZeroMQ。

对于WindowsPhone 7.5(OS 7.1)版本,由于WinPhone 7.5只支持C#,而不是C ++(它实际上是一个C#Silverlight应用程序),所以我必须重新实现所有必需的ZeroMQfunction。 此外,WinPhone 7.5只提供它自己的“版本”的套接字支持( http://msdn.microsoft.com/en-us/library/sb27wehh%28v=vs.95%29.aspx ),它只支持asynchronous版本的function,例如ConnectAsync,SendAync,ReceiveAsync等。但是,C ++的缺乏使得这个问题变得不切实际。

因此,对于WindowsPhone 7.5版本,我只将应用程序限制为“客户端”(参赛者)function,并没有实现“服务器”(测验主控)部分。 这是因为应用程序的客户端部分只发送和接收请求,回复和订阅服务器,而服务器利用了固有的multithreading多用户function的ZeroMQ。 为客户端重新创buildZeroMQ传输协议/头是(相对)简单的,并使用WindowsPhone套接字支持来提供通信。

好吧,现在我正在考虑将应用程序移植到Windows 8上的WinRT。(桌面/平板电脑版本首先 – Windows Phone 8 RT SDK还没有出来,但将是类似的)。 好消息是WinRT支持C ++,耶! (实际上,编写C#时只是WinRT应用程序,可以编译为'AnyCPU',只要包含C ++部分,就必须构build3个不同的版本 – x86 / Win32,x64和ARM版本,但这是一个不同的问题)。

不幸的是,像Windows 7/8 Phone一样,WinRT不支持“正常的”伯克利套接字访问,而是提供它自己的“编程版本”的Socket编程,为不同的套接字场景提供离散类,例如连接TCP客户端的StreamSocket( http ://msdn.microsoft.com/en-us/library/windows/apps/windows.networking.sockets.streamsocket.aspx#methods ),可绑定的TCP服务器的StreamSocketListener( http://msdn.microsoft.com/zh-cn/ -us / library / windows / apps / windows.networking.sockets.streamsocketlistener.aspx#methods )和UDP版本的DatagramSocket / DatagramSocketListener。 此外,只提供了所有方法的asynchronous版本。

所以看起来,为了让ZeroMQ在WinRT上成功编译,我将不得不编写一个Facade层来提供一个类似于Berkeley Socket的C ++接口,并且在WinRT下面执行必要的映射到Socket编程的版本。

是否有其他人开始了这个旅程或写了类似的门面? 有兴趣听到大家的想法,特别是WinRT看起来相当“大”的事情!

虽然它不完整或正确,并有很多的错误,但我已经在这里https://winrtsock.codeplex.com开始这个项目。; 还没有实施任何听/接受

你可能会考虑像ACE一样。 它提供了比套接字更高级别的抽象,并支持诸如WinCE之类的老式Windowsembedded式操作系统。 它是开源的,所以你可以尝试一下,破解它,使其工作,并贡献回来。 或者,您可以联系几个商业机构或提供支持和合同工作的人员之一。