SORU
22 Mart 2009, Pazar


Dinleme soketi paylaşmak için birden çok işlem için bir yolu var mı?

Soket programlama, dinleme soketi oluşturmak ve bağlanan her istemci için sunucu isteği işlemek için kullanabileceğiniz normal akışı bir yuva olsun. OS perde arkasında gelen bağlantılar kuyruğunun yönetir.

İki işlem varsayılan olarak aynı anda aynı bağlantı noktasına bağlanamıyor zaten.

Merak ediyorum eğer bir şekilde (herhangi bir iyi bilinen işletim sistemi, özellikle Windows başlatma birden çok örneğini bir süreç, böyle hepsi bağlamak için yuva, ve böylece etkili bir şekilde paylaşma sırası. Her işlem örnek sonra tek dişli olabilir; sadece yeni bir bağlantı kabul etmesini engelleyeceğini. Bir istemci bağlandığında, işlem örneklerinden biri olduğunu müşteri kabul eder.

Bu her işlem çok basit, tek iş parçacıklı bir uygulama, açık, paylaşılan bellek sürece hiçbir şey paylaşmak için izin verir, ve kullanıcı daha fazla örnek başlatarak işleme bant genişliğini ayarlamak mümkün olacaktır.

Böyle bir özelliği var mı?

Düzenleme:Bu "iş parçacığı Neden kullanmıyorsun?" sorduğun için Belli ki konuları bir seçenek vardır. Ama birden çok iş parçacığı bir tek işlem tüm nesneler paylaşılabilir ve büyük bir özenle sahip olmak için emin olun nesneler ya da paylaşılan, ya da sadece görünen bir konu bir zaman, ya da kesinlikle değişmez ve en popüler Dil ve çalışma eksikliği yerleşik destek için yönetim bu karmaşıklık.

Aynı alt işlemleri bir avuç başlatarak, eşzamanlı bir sistem almak istiyorsunuzvarsayılanpaylaşım yok, çok daha kolay, doğru ve ölçülebilir bir uygulama oluşturmak için yapıyor.

CEVAP
22 Mart 2009, Pazar


Linux ve Windows bile iki veya daha fazla işlem arasında bir yuva paylaşabilirsiniz.

Linux altında (Ya da POSIX türü OS), fork() kullanarak çatallı çocuk ebeveynin tüm dosya tanımlayıcıları kopya sebep olacaktır. Paylaşılmaya devam edecek yakın olan herhangi bir ve (TCP dinleme soketi ile örneğin) istemcileri için accept() yeni bir yuva için kullanılabilir. Bu çok sunucuları, çoğu durumda Apache dahil olmak üzere, böyle bir şeydir.

Windows aynı şey temelde doğru, dışında yok fork() sistem çağrısı üst işleyecek kullanmaya ihtiyaç CreateProcess veya bir şey oluşturmak için bir alt süreci (ki olabilir elbette aynı çalıştırılabilir) ve ihtiyaçlarına geçip bir teoriye kolu.

Bir dinleyen bir teoriye soket kolu yapmak tamamen gereksiz bir aktivite değil ama çok da zor. DuplicateHandle() üzerinde kalıtımsal olan kolu (üst süreç içinde hala ancak), yinelenen bir bayrak oluşturmak için kullanılması gerekir. Sonra ver o kolu STARTUPINFO yapısı, çocuğun süreç içinde CreateProcess gibi bir STDIN, OUT ERR kolu (varsayarak sizi kullanmak istemedi o başka bir şey).

DÜZENLEME:

Okuma MDSN kütüphane , öyle görünüyor ki WSADuplicateSocket daha güçlü veya daha doğru bir mekanizma yapıyor; hala saçma çünkü üst/alt süreçleri çalışmalıyız yapan idare ihtiyacı için eşi benzeri bazı IPC mekanizması (ancak bu olabilir gibi basit bir dosya (dosya sistemi)

AÇIKLAMA:

Cevap için OP orijinal soru yok, birden çok işlem olamaz. bind(); sadece orijinal ana işlem arama bind(), listen() vb, alt işlemler sadece işlem istekleri ile accept(), send(), recv() vb.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Adam Khoury

    Adam Khoury

    23 Ocak 2008
  • BigBoyTV

    BigBoyTV

    25 EYLÜL 2013
  • Michael Lummio

    Michael Lumm

    25 Mayıs 2007