Aynı açık soket üzerinden asenkron çoklu yönü sunucu-müşteri iletişimi?

oy
20

İstemci Windows Mobile 6 aygıtında bir istemci-sunucu uygulaması, C ++ ile yazılmıştır ve sunucu tam Windows üzerinde ve C # ile yazılmış olması.

Başlangıçta, yalnızca sunucu sadece hiç bu mesajı aldığını bir onay geri gönderme ile, istemciden sunucuya mesaj göndermek için gerekli. Şimdi, sunucu aslında istek verilerine müşteriye mesaj göndermek böylece güncellemek istiyoruz. Şu anda var gibi o kadar müşteri, bu her zaman bir istek göndermek için sunucu için izin vermez o sunucuya veri gönderir sonra modu almak sadece olduğunu kurdu. Ben müşteri veri beklemek zorunda kalacak. İlk düşüncem sunucusu zaten açıdan müşteri var gibi ... sunucu isteklerini dinlemeye, ayrı bir açık soket ile istemci üzerinde başka bir iş parçacığı oluşturmak olacaktır. Bir yolu aynı iş parçacığı içinde var mıdır ve her an istekleri göndermek için tüm sunucuya, aynı soket kullanıyor?

Eğer bir şey kullanabilir etkisi WaitForMultipleObjects()ve bir tampon ve gönderilmek üzere veri yoktur söyler bir olay almak geçmesi?

Oluştur 04/08/2008 saat 14:52
kaynak kullanıcı
Diğer dillerde...                            


4 cevaplar

oy
7

asenkron iletişim kullanarak tek iplik tamamen mümkün!

(Reaktör desen olarak adlandırılan ağ yazılımı geliştirme konusunda ortak bir tasarım deseni vardır bu kitaba bakmak ). Bazı iyi bilinen ağ kitaplığı bu modelin bir uygulamasını sağlar ( ACE bakmak ).

Kısaca, reaktör bir nesnedir, içinde tüm soketleri kayıt ve bir şey için bekleyin. Eğer bir şey olduysa reaktör size bildirir (yeni veri ..., bağlantı kapanması geldi). Ve tabii ki, zaman uyumsuz veri göndermek ve alınan tek bir soket kullanabilirsiniz.

Cevap 17/08/2008 saat 14:53
kaynak kullanıcı

oy
7

Ben müşteriler bırakın ve istedikleri zaman girebilir bir istemci-sunucu modeline sahip bir uygulama yazmak için gerekli zaman, emin müşteriler bir göndermelerini (Sana mobil cihazları kullanırken bu da uygulamanız için durum varsayıyorum) çevrimiçi mesaj sunucuya, birbirlerine bağlı ve yaptıklarını gerekli herşeyi yapmaya hazır edildi belirten.

o zaman sunucunun istemciye mesaj göndermek aynı açık bağlantıyı yalak olabilir.

Ayrıca, ama bunun sizin için geçerli olup olmadığını bilmiyorum, ben bir tür vardı kalp atışı o çevrimiçi hala bildirerek, istemciler sunucuya gönderilen. Bu şekilde sunucu, bir istemci zorla ağ bağlantısı kesildi bilir ne zaman ve geri çevrimdışı olarak o müşteri işaretlemek başladı.

Cevap 04/08/2008 saat 15:30
kaynak kullanıcı

oy
3

Check asio . Bu asenkron ES için bir enine Compatable c ++ kütüphanedir. Ben bu sunucuya (ben c # proje için bir standart c ++ DLL bağlamaya çalıştılar asla) ama müşteri için yararlı olacağını için yararlı olacağını emin değilim.

Bizim uygulaması ile kullanmak ve bizim IO eşzamanlılık sorunların çoğunu çözdük.

Cevap 11/08/2008 saat 11:00
kaynak kullanıcı

oy
3

Sana C # sunucu veya C ++ müşteriye asenkron bit eklemek isteyen konum olup olmadığına emin değilim.

Eğer C ++ bunu hakkında konuşuyorsak, masaüstü, Windows platformları G / Ç zaman uyumsuz API o kullanımı yoluyla / O I çakışan soket yapabilirsiniz. soketleri için, WSASend, WSARecv hem zaman uyumsuz I / O (G / Ç tamamlandığında set olsun olaylarla doldurabilirsiniz onların lpOverlapped parametreleri, ilgili belgeleri okuyun) izin verir.

Windows Mobile platformları bu işlevleri desteklemesi halinde bazı ek kazı yapmak gerekebilir yüzden, bilmiyorum.

Cevap 05/08/2008 saat 06:30
kaynak kullanıcı

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