35 votes

Berkeley Socket façade pour WinRT Réseau de plausibilité?

C'est une copie d'un message que j'ai envoyé à la ZeroMQ liste de diffusion. Toutefois, la question se pose, il n'est pas spécifique de ZeroMQ, mais de manière plus générale sur la nécessité d'une "cartographie" de la couche sur la mise en réseau fonctionnalités fournies dans WinRT pour fournir une plus normal 'Berkeley Prise de façade" pour le code C++ lors de la compilation de contre WinRT:

Salut à tous, j'ai utilisé ZeroMQ dans une application mobile (voir http://www.ibuzzedfirst.com auparavant, pour iPhone et pour Android versions, ces plates-formes de support natif/C++/Prise de développement, et, par conséquent, ZeroMQ.

Pour le WindowsPhone 7.5 (OS 7.1) numéro de version, j'ai dû re-mettre en œuvre toute ZeroMQ fonctionnalité à partir de zéro, comme WinPhone 7.5 prend uniquement en charge C#, C++ (c'est effectivement un C# Silverlight Application). Aussi, WinPhone 7.5 seulement fournit sa propre "version" de Prise en charge ( http://msdn.microsoft.com/en-us/library/sb27wehh%28v=vs.95%29.aspx qui ne soutien Async versions de fonctions, par exemple ConnectAsync, SendAync, ReceiveAsync etc. Cependant, le manque de C++ fait un point discutable.

En tant que tel, pour le WindowsPhone 7.5 version, j'ai limité l'application de 'client' (Concurrent) functionalty seulement, et ne pas mettre en œuvre le "serveur" (Maître de jeu) de la partie. C'est parce que la partie client de l'application n'envoie et reçoit les demandes, les réponses et les abonnements pour le serveur, tandis que le serveur utilise le inhérents multi-thread fonctionnalité multi-utilisateurs de ZeroMQ. Il est (relativement) simple à recréer le ZeroMQ protocole de transport/en-têtes, pour le client, et d'utiliser le WindowsPhone Prise en charge de fournir des comms.

Ok, maintenant, je suis à la recherche de portage de l'application WinRT sur Windows 8. (Le bureau/la version tablette de premier Windows Phone 8 et RT SDK n'est pas encore sorti, mais sera similaire). La bonne nouvelle, c'est que le C++ est pris en charge dans WinRT, yay! (En fait, il n'est pas toujours aussi simple que cela, lors de l'écriture de C# uniquement WinRT apps, vous pouvez compiler pour "AnyCPU", dès que vous incluez un de C++ partie, vous avez à construire 3 versions différentes - x86/Win32, x64 et ARM versions, mais c'est un autre problème).

Malheureusement, comme Windows 7/8 Téléphone, WinRT ne prend PAS en charge "normale" Berkeley Socket accès, mais au lieu dispose de sa propre "version" de la programmation Socket, avec des classes discrètes pour une autre prise de courant scénarios, par exemple StreamSocket pour une connexion TCP client ( http://msdn.microsoft.com/en-us/library/windows/apps/windows.networking.sockets.streamsocket.aspx#methods ), StreamSocketListener pour un bindable serveur TCP ( http://msdn.microsoft.com/en-us/library/windows/apps/windows.networking.sockets.streamsocketlistener.aspx#methods ), et DatagramSocket / DatagramSocketListener pour l'UDP versions. En outre, seulement async versions de toutes les méthodes sont fournies.

Donc, il semble que, pour obtenir ZeroMQ pour compiler avec succès sur WinRT, je vais avoir à écrire une Façade de la couche de provdes un Berkeley Socket-comme l'interface C++, et en dessous effectue le mappage nécessaire à la version de la Prise de programmation fournis par WinRT.

Quelqu'un d'autre a commencé ce voyage ou écrit un semblable façade? Intéressé à entendre les pensées de tout le monde, notamment en WinRT semble tout à fait une "grande chose"!

2voto

Jeremiah Morrill Points 3693

Bien que son loin d'être complète ou correcte et il y a beaucoup de bugs, mais j'ai commencé ce projet ici https://winrtsock.codeplex.com. N'ont pas mis en œuvre, écouter, accepter encore

1voto

Chris Cleeland Points 2199

Vous pourriez envisager de faire quelque chose comme ACE. Il donne un peu des abstractions de niveau supérieur sur les sockets, et prend en charge windows plus anciens systèmes d'exploitation embarqués tels que la Crispation et la comme. Il est open source, donc vous pouvez l'essayer, hack place pour le faire fonctionner et contribuer en retour. Sinon, vous pouvez contacter l'une de plusieurs entreprises commerciales ou les personnes qui offrent un soutien et le contrat de travail.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X