Berkeley Socket facade for WinRT Networking plausibilidad?


Esta es una copia de un post que he enviado a la lista de correo de ZeroMQ. Sin embargo, la pregunta no es específica de ZeroMQ, sino más generalmente con respecto a la necesidad de una capa de' mapeo 'sobre la funcionalidad de red proporcionada en WinRT para proporcionar una' fachada de sockets Berkeley ' más normal para el código C++ cuando se compila contra WinRT:

Hola a todos, he utilizado ZeroMQ en una aplicación móvil (ver http://www.ibuzzedfirst.com ) anteriormente, para las versiones de iPhone y Android, como los las plataformas soportan el desarrollo nativo/C++/Socket, y por lo tanto ZeroMQ.

Para la versión WindowsPhone 7.5 (OS 7.1), tuve que volver a implementar cualquier funcionalidad requerida de ZeroMQ desde cero, ya que WinPhone 7.5 solo admite C#, no C++ (es efectivamente una aplicación C# Silverlight). Además, WinPhone 7.5 solo proporciona su propia 'versión' de soporte de socket ( http://msdn.microsoft.com/en-us/library/sb27wehh%28v=vs.95%29.aspx ) que solo admiten versiones asíncronas de funciones, por ejemplo, ConnectAsync, SendAync, ReceiveAsync, etc. Sin embargo, la falta de C++ hizo de esto un punto discutible.

Como tal, para la versión 7.5 de WindowsPhone, restringí la aplicación solo a la función 'cliente' (Concursante), y no implementé la parte 'servidor' (Maestro de Pruebas). Esto se debe a que la parte cliente de la aplicación solo envía y recibe solicitudes, respuestas y suscripciones al servidor, mientras que el servidor utiliza la funcionalidad multihilo multiusuario inherente de ZeroMQ. Era (relativamente) simple vuelva a crear el protocolo de transporte de ZeroMQ/encabezados para uso del cliente, y utilice el soporte de zócalo de WindowsPhone para proporcionar comunicaciones.

Ok, ahora estoy viendo portar la aplicación a WinRT en Windows 8. (La versión de escritorio / tableta primero - el SDK de Windows Phone 8 RT aún no está disponible, pero será similar). La buena noticia es que C++ es compatible con WinRT, ¡yay! (En realidad, todavía no es tan simple, al escribir aplicaciones WinRT en C# solo, puede compilar para 'AnyCPU', tan pronto como incluya una porción de C++, tiene para construir 3 versiones diferentes-x86 / Win32, x64, y versiones ARM, pero eso es un problema diferente).

Desafortunadamente, al igual que Windows 7/8 Phone, WinRT NO admite el acceso' normal 'a Sockets Berkeley, sino que ofrece su propia' versión ' de programación de Sockets, con clases discretas para diferentes escenarios de sockets, por ejemplo, StreamSocket para un cliente TCP de conexión ( http://msdn.microsoft.com/en-us/library/windows/apps/windows.networking.sockets.streamsocket.aspx#methods ), StreamSocketListener para un servidor TCP enlazable ( http://msdn.microsoft.com/en-us/library/windows/apps/windows.networking.sockets.streamsocketlistener.aspx#methods), y DatagramSocket / DatagramSocketListener para las versiones UDP. Además, solo se proporcionan versiones asincrónicas de todos los métodos.

Así que parece que, para que ZeroMQ compile con éxito en WinRT, voy a tener que escribir una capa de Fachada que provdes una interfaz C++ similar a un Socket Berkeley, y debajo realiza la asignación necesaria a la versión de programación de Sockets proporcionada por WinRT.

¿Alguien más ha comenzado este viaje o escrito una fachada similar? Interesado en escuchar los pensamientos de todos, especailly como WinRT mira todo un 'gran cosa'!

Author: sarvesh, 2012-09-17

2 answers

Aunque está lejos de ser completo o correcto y tiene muchos errores, pero he comenzado este proyecto aquí https://winrtsock.codeplex.com . No han implementado ningún listen / accept hasta ahora

 2
Author: Jeremiah Morrill,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-07-30 08:40:02

Podrías considerar algo como ACE. Proporciona abstracciones de nivel ligeramente superior sobre sockets, y soporta sistemas operativos windows embebidos más antiguos como WinCE y similares. Es de código abierto, por lo que puedes probarlo, hackearlo para que funcione y contribuir. Alternativamente, puede ponerse en contacto con una de varias organizaciones comerciales o personas que ofrecen apoyo y contratan el trabajo.

 1
Author: Chris Cleeland,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-01-24 22:32:46