35

これは、私が ZeroMQ メーリング リストに送信した投稿のコピーです。ただし、問題は ZeroMQ に固有のものではなく、より一般的には、WinRT に対してコンパイルするときに C++ コードのより通常の「バークレー ソケット ファサード」を提供するために、WinRT で提供されるネットワーク機能上の「マッピング」レイヤーの必要性に関するものです。

こんにちは、以前、iPhone および Android バージョンのモバイル アプリ ( http://www.ibuzzedfirst.comを参照)で ZeroMQ を使用しました。これらのプラットフォームはネイティブ/C++/Socket 開発をサポートしているため、ZeroMQ です。

WindowsPhone 7.5 (OS 7.1) バージョンでは、必要な ZeroMQ 機能をゼロから再実装する必要がありました。WinPhone 7.5 は C++ ではなく C# のみをサポートするためです (実質的には C# Silverlight アプリです)。また、WinPhone 7.5 は、関数の非同期バージョンのみをサポートする独自の「バージョン」のソケット サポート ( http://msdn.microsoft.com/en-us/library/sb27wehh%28v=vs.95%29.aspx ) のみを提供します。たとえば、ConnectAsync、SendAync、ReceiveAsync などです。ただし、C++ がないため、これは論点になりませんでした。

そのため、WindowsPhone 7.5 バージョンでは、アプリを「クライアント」(競技者) 機能のみに制限し、「サーバー」(クイズ マスター) 部分を実装しませんでした。これは、サーバーが ZeroMQ 固有のマルチスレッド マルチユーザー機能を利用しているのに対し、アプリのクライアント部分はサーバーに対して要求、応答、およびサブスクリプションのみを送受信するためです。クライアントが使用する ZeroMQ トランスポート プロトコル/ヘッダーを再作成し、WindowsPhone Socket サポートを使用して通信を提供するのは (比較的) 簡単でした。

わかりました。現在、アプリを Windows 8 の WinRT に移植することを検討しています (デスクトップ/タブレット バージョンが最初です。Windows Phone 8 RT SDK はまだリリースされていませんが、同様のものになる予定です)。良いニュースは、C++ が WinRT でサポートされていることです。(実際には、まだそれほど単純ではありません。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 で正常にコンパイルするには、Berkeley Socket のような C++ インターフェイスを提供する Facade レイヤーを記述し、その下で WinRT が提供する Socket プログラミングのバージョンへの必要なマッピングを実行する必要があります。 .

他の誰かがこの旅を始めた、または同様のファサードを書いたことがありますか? 特に WinRT は非常に「大きなもの」を目指しているので、皆さんの意見を聞くことに興味があります。

4

2 に答える 2

2

完全または正しいとはほど遠いですが、多くのバグがありますが、私はこのプロジェクトをここで開始しましたhttps://winrtsock.codeplex.com。まだ listen/accept を実装していません

于 2013-07-30T08:40:02.203 に答える
1

あなたはACEのようなものを考えるかもしれません。ソケットに対してわずかに高レベルの抽象化を提供し、WinCEなどの古いWindows組み込みOSをサポートします。オープンソースなので、試してみて、ハックして機能させ、貢献することができます。または、サポートを提供して作業を請け負ういくつかの商業組織または人々の1つに連絡することもできます。

于 2013-01-24T22:32:46.783 に答える