Подтвердить что ты не робот

Фасад Berkeley Socket для надежности WinRT?

Это копия сообщения, отправленного в список рассылки ZeroMQ. Однако возникает вопрос, что это не относится к ZeroMQ, но в более общем плане относится к необходимости слоя "сопоставления" над сетевыми функциями, предоставляемыми в WinRT, для обеспечения более нормального "фасада Berkeley Socket" для кода С++ при компиляции с WinRT:

Привет всем, я использовал ZeroMQ в мобильном приложении (см. http://www.ibuzzedfirst.com) ранее, для версий для iPhone и Android, так как эти платформы поддерживают разработку native/С++/Socket и, следовательно, ZeroMQ.

Для версии WindowsPhone 7.5 (OS 7.1) мне пришлось повторно реализовать любые необходимые функции ZeroMQ с нуля, поскольку WinPhone 7.5 поддерживает только С#, а не С++ (это приложение С# Silverlight). Кроме того, WinPhone 7.5 предоставляет только собственную версию Socket поддержки (http://msdn.microsoft.com/en-us/library/sb27wehh%28v=vs.95%29.aspx), которая поддерживает только версии Async функций, например. ConnectAsync, SendAync, ReceiveAsync и т.д. Тем не менее, отсутствие С++ это спорный вопрос сделал.

Таким образом, для версии WindowsPhone 7.5 я ограничил приложение только функциональностью "клиент" (Contestant) и не реализовал часть "сервер" (мастер-класс). Это связано с тем, что клиентская часть приложения отправляет и получает запросы, ответы и подписки на сервер, тогда как сервер использует встроенную многопоточную многопользовательскую функциональность ZeroMQ. Было (относительно) просто воссоздать транспортный протокол/заголовки ZeroMQ для использования клиентами и использовать поддержку Socket WindowsPhone для предоставления комм.

Хорошо, теперь я смотрю на перенос приложения на WinRT в Windows 8. (Сначала версия для настольных компьютеров/планшетов - SDK для Windows Phone 8 RT еще не вышел, но будет похож). Хорошей новостью является то, что С++ поддерживается в WinRT, yay! (На самом деле это все еще не так просто, при написании только приложений WinRT на С# вы можете скомпилировать для "AnyCPU", как только вы включите часть С++, вам нужно создать 3 разные версии - x86/Win32, x64 и ARM, но это другая проблема).

К сожалению, как и Windows 7/8 Phone, WinRT НЕ поддерживает "нормальный" доступ к Berkeley Socket, но вместо этого предлагает свою собственную "версию" программирования Socket, с дискретными классами для разных сценариев сокета, например. StreamSocket для подключающегося TCP-клиента (http://msdn.microsoft.com/en-us/library/windows/apps/windows.networking.sockets.streamsocket.aspx#methods), StreamSocketListener для привязываемого TCP-сервера (http://msdn.microsoft.com/en-us/library/windows/apps/windows.networking.sockets.streamsocketlistener.aspx#methods) и DatagramSocket/DatagramSocketListener для версий UDP. Кроме того, предоставляются только асинхронные версии всех методов.

Итак, похоже, чтобы заставить ZeroMQ успешно компилироваться на WinRT, мне придется написать слой Facade, который доказывает интерфейс, похожий на Berkeley Socket, как и С++, а под ним выполняется необходимое сопоставление с версией программирования Socket предоставленный WinRT.

Кто-нибудь еще начал это путешествие или написал аналогичный фасад? Интересно услышать все мысли, особенно, поскольку WinRT выглядит довольно "большой"!

4b9b3361

Ответ 1

Хотя это далеко не полный или правильный и имеет множество ошибок, но я начал этот проект здесь https://winrtsock.codeplex.com. Пока еще не реализовано какое-либо прослушивание/принятие.

Ответ 2

Вы можете рассмотреть что-то вроде ACE. Он обеспечивает несколько более высокие уровни абстракций над сокетами и поддерживает старые встроенные ОС, такие как WinCE и т.п. Это с открытым исходным кодом, поэтому вы можете попробовать его, взломать, чтобы он работал и вносил свой вклад. В качестве альтернативы вы можете обратиться в одну из нескольких коммерческих организаций или людей, которые предлагают поддержку и контракт на работу.