Berkeley Socket外观为WinRT网络提供了合理性?

时间:2012-09-17 11:12:46

标签: sockets windows-8 microsoft-metro windows-runtime zeromq

这是我发送到ZeroMQ邮件列表的帖子的副本。然而,问题是它不是特定于ZeroMQ,而是更普遍地关于在WinRT中提供的网络功能的“映射”层的需要,以便在针对WinRT编译时为C ++代码提供更正常的“Berkeley Socket facade”: / p>

大家好,我之前在移动应用程序中使用过ZeroMQ(请参阅http://www.ibuzzedfirst.com),对于iPhone和Android版本,因为这些平台支持本机/ 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),它仅支持Async版本的功能,例如: ConnectAsync,SendAync,ReceiveAsync等。然而,缺乏C ++使得这个问题没有实际意义。

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

好的,现在我正在考虑将应用程序移植到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客户端(http://msdn.microsoft.com/en-us/library/windows/apps/windows.networking.sockets.streamsocket.aspx#methods)的StreamSocket,用于可绑定TCP服务器(http://msdn.microsoft.com/en-us/library/windows/apps/windows.networking.sockets.streamsocketlistener.aspx#methods)的StreamSocketListener,以及用于UDP版本的DatagramSocket / DatagramSocketListener。此外,仅提供了所有方法的异步版本。

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

有没有其他人开始这个旅程或写过类似的门面?有兴趣听取每个人的想法,特别是因为WinRT看起来非常“重要”!

2 个答案:

答案 0 :(得分:2)

虽然它远非完整或正确并且有很多错误,但我已经在这里启动了这个项目https://winrtsock.codeplex.com。尚未实施任何收听/接受

答案 1 :(得分:1)

您可能会考虑ACE之类的内容。它在套接字上提供略高级别的抽象,并支持较旧的Windows嵌入式操作系统,如WinCE等。它是开源的,所以你可以尝试一下,破解它以使其工作并回馈。或者,您可以联系几个商业组织或提供支持并签订合同的人员。