2010-08-09 21 views
6

Yüksek performanslı bir sunucu oluşturmak istediğinizde java'da normal soket yerine nio kullandığınızı biliyorum. Yüksek performanslı sunucular oluşturmak için C# için böyle bir şey var mı?C# ==> Yüksek performanslı sunucu?

+1

Son zamanlarda bunu ilginç bulabileceğinizi gördüm: http://developers.slashdot.org/story/10/07/27/1925209/Java-IO-Faster-Than-NIO – AaronLS

+0

@AaronLS: Nio'ya benziyor .NET'in yuvaları her iki şekilde çalışırken, bir async yuva kitaplığıdır. –

+2

Soket sınıfları, dilden bağımsız olarak .NET'te aynı olacak, bu yüzden etiketlerinizi değiştirdim. –

cevap

11

Evet SocketAsyncEventArgs:

SocketAsyncEventArgs sınıfı özel yüksek performanslı soket tarafından kullanılabilecek bir alternatif asenkron model sağlar System.Net.Sockets.Socket sınıfa geliştirmeleri bir kümesinin bir parçası olan uygulamalar. Bu sınıf, yüksek performans gerektiren ağ uygulamaları için özel olarak tasarlanmış özelliğidir. Bir uygulama, nolu gelişmiş asenkronize modelini yalnızca veya yalnızca hedeflenen sıcak alanlarında (örneğin, büyük miktarda veri alırken) kullanabilir.

+3

Uhm, bu yanlış değil, ama bu normal bir 'Soket' yerine * yerine * kullanılan özel bir sınıf gibi ses çıkarır. . –

+2

SocketAsyncEventArgs ile programlama kesinlikle 'yalnızca belirli türden bir uyumsuz çağrılar için olay' değildir. Bir proje başlatıldığında, bunu yapmak için net bir seçim vardır: senkronizasyon çağrıları kullanın, klasik async (başlangıç ​​/ geri arama/sonlandırma) kullanın veya SocketAsyncEvent kullanın. Sürüm 3.5'teki Soket Performansı Geliştirmeleri konusuna bakın. Http://msdn.microsoft.com/en-us/library/bb968780.aspx –

0

Düzenli prizleri kullanmanın farklı yolları vardır. Genellikle, eşzamansız kullanım daha iyi ölçeklenir.

2

Asenkron soketleri kullanabilirsiniz. Eğer bu yeterince iyi değilse, HPC SDK'nın bir parçası olan Network Direct SPI'u her zaman kontrol edebilirsiniz. Ancak, Network Direct'in donanıma özgü sağlayıcı gerektirdiğini unutmayın.

+0

+1 Ancak, doğrudan ağ için yönetilen bir API bulunmuyor mu? –

+0

Bu ilginç görünüyor, ancak donanıma özgü gereksinimler harika bir fikir olup olmadığını merak ediyor. Bir başka ilginç-ama-belki de yanıltıcı seçenek sadece P/Invoke kullanmaktır. –

+0

Senkronize olmayan bunu yapmazsa, sunucuya bağlanan 5k'dan fazla istemciden bahsediyoruz ve bağlı kaldık ve sunucuyla iletişim kurarız. Ağ doğrudan SPI bir göz atacağım, teşekkürler – aryaxt

1

SocketAsyncEventArgs, hızlı bir şekilde Windows I/O Tamamlama Bağlantı Noktalarını kullanır. Senkronize olan asenkrondir. SocketAsyncEventArgs ile gerçekten büyük bir anlaşma G/Ç Tamamlanma Portları.

SocketAsyncEventArgs nasıl kullanıldığını görmek için http://www.codeproject.com/KB/cs/socketasynceventargs.aspx'a bakın.

İlgili konular