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

yor*_*pud 35 sockets zeromq microsoft-metro windows-8 windows-runtime

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

大家好,我之前在移动应用程序中使用过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客户端的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看起来非常"重要"!

Jer*_*ill 2

虽然它还远未完成或正确,并且存在很多错误,但我已经在这里开始了这个项目https://winrtsock.codeplex.com。到目前为止还没有实现任何监听/接受