Aszinkron többirányú szerver-kliens kommunikációt ugyanolyan nyitott socket?

szavazat
20

Van egy kliens-szerver alkalmazás, ahol az ügyfél egy Windows Mobile 6 eszköz, C ++ és a szerver a teljes Windows és írt C #.

Eredetileg csak szüksége, hogy üzeneteket küldeni a kliens a szerver, a szerver mindig csak küld vissza elismervényt, hogy megkapta az üzenetet. Most szeretném frissíteni úgy, hogy a szerver valóban küld egy üzenetet, hogy az ügyfél a kérelem adatait. Mivel jelenleg is van ez létre, így az ügyfél csak vételi üzemmódban, miután adatokat küld a szerver, ez nem teszi lehetővé, hogy a szerver küld egy kérést bármikor. Azt meg kell várni az ügyfél adatait. Az első gondolatom az lenne, hogy hozzon létre egy másik szál a kliensnek önálló nyitott socket, hallgat a kiszolgáló kéri ... mint a szerver már tekintetében az ügyfél. Van egy módja annak, hogy ugyanazon cérna, és ugyanazzal a socket, hogy minden szerver küld kéréseket bármikor?

Lehet használni valamit az befolyásolja az WaitForMultipleObjects(), és adja át a vételi puffer és egy esemény, amely azt mondja, hogy ott van az elküldendő adatok?

A kérdést 04/08/2008 14:52
a forrás felhasználó
Más nyelveken...                            


4 válasz

szavazat
7

Az aszinkron kommunikáció teljesen lehetséges egyetlen szál!

Van egy közös tervezési minta a hálózati szoftver fejlesztés az úgynevezett reaktor mintát ( nézd meg ezt a könyvet ). Néhány jól ismert hálózati könyvtár egy végrehajtása ezt a mintát ( nézd meg ACE ).

Röviden, a reaktor egy tárgy, akkor regisztrálja az összes aljzatok belül, és várja meg valamit. Ha valami történt (új adatok érkeztek, a kapcsolat szoros ...) a reaktor értesíti Önt. És persze, akkor csak egy aljzat küldeni és fogadott adatok aszinkron.

Válaszolt 17/08/2008 14:53
a forrás felhasználó

szavazat
7

Amikor szükséges, hogy írjon egy kérelmet egy kliens-szerver modell, ahol az ügyfelek is hagyja, és adja meg, amikor akarnak, (feltételezem, hogy ez a helyzet továbbá az alkalmazást, akkor a mobil eszközök használata) tettem arról, hogy az ügyfelek Levél internetes üzenet a szerverre, jelezve voltak kötve, és készen állunk, amire szükségük csinál.

abban az időben a szerver üzenetet küldeni az ügyfél felé keresztül ugyanazt a nyílt kapcsolatot.

Is, de nem tudom, ha ez vonatkozik Önre, volt valami szívverés az ügyfelek küldeni a szerver, hagyta, hogy tudom, hogy még az interneten. Így a szerver tudja, amikor egy ügyfél erőszakkal kapcsolatban a hálózattal, és azt is, hogy jelölje meg az ügyfél vissza nem elérhető.

Válaszolt 04/08/2008 15:30
a forrás felhasználó

szavazat
3

Távozás ASIO . Ez egy kereszt-kompatibilis C ++ könyvtár asyncronous IO. Nem vagyok biztos benne, hogy ez hasznos lenne a szerver (még soha nem próbáltam összekapcsolni a szabványos C ++ DLL ac # projekt), de az ügyfél hasznos lenne.

Arra használjuk, hogy a mi alkalmazás, és ez megoldotta a legtöbb IO konkurencia problémákat.

Válaszolt 11/08/2008 11:00
a forrás felhasználó

szavazat
3

Nem vagyok tisztában, hogy vagy nem akarják, hogy adjunk az aszinkron biteket a kiszolgáló C # vagy az ügyfél C ++.

Ha beszélünk ezt a C ++, asztali Windows platformon képes socket I / O aszinkron keresztül API, amely használat átfedésben I / O. Aljzatok, WSASend, WSARecv egyaránt lehetővé teszi aszinkron I / O (olvasd el a dokumentációt saját LPOVERLAPPED paraméterek, amelyeket akkor feltölti az eseményeket, hogy kap meg, ha az I / O befejezi).

Nem tudom, hogy a Windows Mobile platform támogatja ezeket a funkciókat, így előfordulhat, hogy néhány további ásni.

Válaszolt 05/08/2008 06:30
a forrás felhasználó

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more