MUSCLE , Çoklu Kullanıcı Sunucusu İstemcisi Bağlantı Ortamı anlamına gelir ve bu, sunucu ve istemci bileşenlerinden oluşan açık kaynaklı, ücretsiz, sağlam, ölçeklenebilir ve çapraz platformlu bir mesajlaşma sistemidir. Çok oyunculu oyunlardan ve IRC sohbet istemcilerinden SETI hesaplama uygulamalarına kadar her türlü dağıtılmış yazılımı yazmanıza yardımcı olacaktır.
Bir bakışta özellikler
MUSCLE ile kullanıcılar, kendi oturum mantığını veya mesaj akışı protokolünü tanımlayarak dahil edilen "kaslı sunucuyu" kolayca özelleştirebilecekler. Yazılım, istemci kodunuzu C ++, C, C #, Java, Delphi veya Python programlama dillerinden birinde yazmanıza yardımcı olur.
Program, BMessage benzeri kas kullanır :: Mesajlar, düzleştirilmiş kas göndermeyi destekler :: TCP (İletim Kontrol Protokolü) akışları aracılığıyla bilgisayarlar arasındaki mesajlar, bir & ldquo; kaslı sunucu & rdquo; Sunucuyla iletişim kurmak için kullanılabilecek istemci programları yazmanıza izin veren bir sunucu makinesinde.
Ayrıca, yukarıda bahsedilen tüm programlama dillerini destekleyen tek ve çok iş parçacıklı mesajlaşma API'lerini içerir. & Ldquo; kaslı sunucu & rdquo; Bir mesaj akışı protokolü veya oturum mantığı tanımlayarak kolayca özelleştirilebilir.
MUSCLE ile çalışmaya başlama
Başarılı bir girişten sonra, istemci programları merkezi sunucuya başka kimin giriş yaptığını belirleyebilir, ayrıca kastaki mesajları kaydedebilir (RAM) (sistem belleği) ve kas gönderir. sunucuya. İstemci programlarının sunucudaki belirli verilere abone olabileceğini ve veriler değiştiğinde anında bildirim alabileceğini lütfen unutmayın.
Çok çeşitli mesaj rotasyonlarını destekler
Yazılım, tekdüze tarzı, yayın stili ve çok noktaya yayın tarzı olanlar da dahil olmak üzere, akıllı, hiyerarşik desen eşleme yönlendirme mekanizması aracılığıyla çok çeşitli ileti rutinlerini destekleyecek şekilde tasarlanmıştır.
Desteklenen İşletim Sistemleri ve kullanılabilirliği
MUSCLE, POSIX uyumlu bir işletim sisteminde çalışır. Kullanıcıların GNU / Linux sistemi için uygulamayı optimize etmelerini sağlayan tek bir evrensel kaynak arşivi olarak dağıtılmaktadır. Hem 32 bit hem de 64 bit donanım platformları şu anda destekleniyor.
Bu sürümde yeni olan :
- testler / Makefile-mt, testreflectession desteğini destekleyen bir işletim sistemi üzerinde yürütme dışında testreflectsession'ı derlemeyi denememektedir.
- Bazıları "MUSCLE by Example" (Örnekle MUSCLE) düzenleme ve yeniden düzenleme işlemlerini gerçekleştirdi. sayfalar.
- MkDocs’ta [URL’ler] (...) olan birtakım "etiketler" değiştirildi
- CountedObject öğesinin özel mirasını kaldırılan tüm sınıflardan kaldırıldı - artık bunun yerine bir CountedObject özel üye değişkeni içeriyorlar. Bu sadece tüm özel mirasın DOKU kalıtım grafiklerini karıştırdığı için yapıldı.
- CountedObject.h'ye bir DECLARE_COUNTED_OBJECT makrosu eklendi, böylece Sayıcı Nesnelerin herhangi bir potansiyel bellek yükü, nesne sayımının istenmediği durumlarda ortadan kaldırılabilir.
- -DMUSCLE_AVOID_OBJECT_COUNTING için destek kaldırıldı ve yerine bir -DMUSCLE_ENABLE_OBJECT_COUNTING makro ekledi. (Yani, CountedObject sınıfı artık varsayılan olarak devre dışıdır ve kullanımı için açıkça etkinleştirilmelidir)
- & quot; Örnekle MUSCLE & quot; MiscUtilityFunctions için belgeler. {cpp, h}
- Örneklerle MUSCLE MkDocs kaynağında bir dizi `etiketler '[urls] olarak değiştirildi, böylece söz ettikleri yöntemler hızlı bir şekilde gözden geçirilebilir.
- sunucu / Makefile artık libmuscle.a dosyasını main () .o dosyasından sonra belirtir.
- Testler klasöründe bazı gcc uyarıları düzeltildi (Mika'nin önerileri doğrultusunda)
- UnparseFile (), anahtar kelimeleri uygun şekilde boşluklarla alıntılamıyordu. Düzeltildi.
- Bağımlılıkları "MUSCLE by Example" & quot; örnekler 'Makefiles.
Sürümde yeni :
- Kuyruğa, Sızdırılabilir'e bir ShrinkToFit () kolaylık yöntemi eklendi. ve Dize sınıfları. Bu yöntem nesneyi küçültür, böylece tahsis ettiği bellek miktarı dahili olarak tuttuğu verinin büyüklüğüyle eşleşir.
- Hashtable :: EnsureSize () ve Queue :: EnsureSize () şimdi isteğe bağlı (allowShrink) argümanını alır, (true olarak ayarlanırsa), nesnenin dahili olarak ayrılmış dizinin gerektiğinden daha büyükse yeniden paylaştırılmasına izin verir.
- String sınıfının arabellek genişletme davranışını biraz daha verimli olacak şekilde değiştirdiler.
- "BELLEK DIŞI BIRAKIN" mesajını kaydederken oluşabilecek olası sonsuz bir tekrarlamaya karşı bir koruma eklendi. bir LogCallback belleği ayırmaya çalıştıysa, bir bellek ayırma hatasından sonra hata oluştu.
6.01 sürümünde yeni :
- String sınıfına bir PrependWord () kolaylık yöntemi eklendi.
- String sınıfına WithReplacements () kolaylık yöntemleri eklendi.
- DetectNetworkConfigChangesSession sınıfına SetExplicitDelayMicros () yöntemi eklendi.
- NetworkInterfaceInfo sınıfına bir IsCopperDetected () yöntemi eklendi, böylece bir Ethernet girişine bir kablo soketinin takılı olup olmadığını anlatabilirsiniz.
- & quot; quietsend & quot; hexterm argümanı.
- DetectNetworkConfigChangesSession sınıfındaki NetworkInterfacesChanged () sanal yöntemi, özellikle hangi ağ arabirimlerinin değiştiğini söyleyen bir argüman alacak şekilde değiştirildi. Bu işlevsellik şu anda sadece Linux, MacOS / X ve Windows altında yürütülmektedir. Diğer işletim sistemlerinde argüman her zaman boş bir liste olacaktır.
- Recvmsg () bir hata döndürdüğünde (ör., alınan bir sinyale bağlı olarak) bir parçalanma hatasına neden olabilecek DetectNetworkConfigChangesSession'ın Linux uygulamasında bir hata düzeltildi.
Sürüm 6.00’da yeni: :
- Engellemeyen G / Ç (daha yeni SSLSocketAdapterGateway sınıfı ile birlikte) ile daha iyi çalışabilmek için SSLSocketDataIO sınıfını yeniden yazdı.
- Bir ByteBuffer'ı argüman olarak alan SSLSocketDataIO :: SetPrivateKey () ve SSLSocketDataIO :: SetCertificate () uygulamaları eklendi.
- Ağ geçidinizle bir SSLSocketDataIO sınıfı kullanırken OpenSSL'nin dahili durum makinesini yönetmek için kullanılan bir SSLSocketAdapterGateway sınıfı eklendi.
- Tüm gelen TCP bağlantılarında SSL kimlik doğrulamanın daha kolay etkinleştirilmesi için, ReflectServer sınıfına SetSSLPrivateKey () ve GetSSLPrivateKey () yöntemleri eklendi. Bu yöntemler kullanılabilir. MUSCLE_ENABLE_SSL tanımlanmıştır.
- Dışarıdaki TCP bağlantılarında SSL kimlik doğrulamanın daha kolay etkinleştirilmesi için, ReflectServer sınıfına SetSSLPublicKeyCertificate () ve GetSSLPublicKeyCertificate () yöntemleri eklendi. Bu yöntemler kullanılabilir. MUSCLE_ENABLE_SSL tanımlanmıştır.
- Dişli G / Ç'yi kullanırken SSL işlevselliğini daha kolay etkinleştirmek için SetSSLPrivateKey () ve SetSSLPublicKeyCertificate () yöntemlerini MessageTransceiverThread sınıfına eklediniz.
- OpenSSL genel / özel anahtar çiftlerini oluşturma hakkında bazı bilgiler içeren bir ssl_data klasörü ve OpenSSL'yi test etmek için örnek bir anahtarlık eklendi.
- MUSCLE_ENABLE_SSL tanımlandığında, kaslı artık isteğe bağlı bir 'privatekey = dosya adı' bağımsız değişkeni kabul eder. Belirtildiğinde, SSL modu etkinleştirilir ve kasıtlı olarak, yalnızca bu özel anahtar / sertifika ile eşleşen ortak anahtarlar sunan gelen TCP bağlantılarını kabul eder.
- MUSCLE_ENABLE_SSL tanımlandığında portablereflectclient ve qt_example artık isteğe bağlı 'publickey = dosyaadı' argümanını kabul edecektir. Belirtildiğinde, SSL modu etkinleştirilecek ve bu istemciler OpenSSL kullanarak kaslı hale bağlanacak ve bu dosyayı kimlik bilgileri olarak sunacaktır.
- & quot; Animate & quot; qt_example demosu için onay kutusu. Kontrol etmek pencerenin göstergesini otomatik olarak hareket ettirmesine neden olur. Birden fazla istemcinin aynı anda trafik oluşturduğu bir senaryoyu test etmek istiyorsanız, bu eğlenceli ve aynı zamanda yararlıdır.
- qt_example demosunu daha güzel yaptı.
- Hashtable.h ve Queue.h içindeki C ++ 11 yardımcı makrolarını yeniden adlandırıp diğer paketlerin makrolarıyla çakışması daha az olası hale getirdi. SSLSocketDataIO sınıfında bazı küçük hatalar düzeltildi. o Yeniden adlandırılmış SSLSocketDataIO :: SetKey () SetPrivateKey (). o SetPublicKeyCertificate () için SSLSocketDataIO :: SetCertificate () yeniden adlandırıldı. o AbstractMessageIOGateway :: SetDataIO () artık sanal bir yöntemdir.
Sürüm 5.92’de yeni: :
- Kuyruk ve Hashtable sınıflarında C ++ 11 hareket semantiği için iyileştirilmiş destek (yalnızca -DMUSCLE_USE_CPLUSPLUS11 tanımlandığında etkinleştirilir)
- String sınıfına bazı enstrümantasyonlar ekledim, böylece bir String nesnesinin kaç kez kopyalandığını, taşındığını vb. izleyebilirim (yalnızca -DMUSCLE_COUNT_STRING_COPY_OPERATIONS tanımlandığında etkinleştirilir)
- Yukarıda toplanan String işlemi verilerini yazdıracak bir PrintAndClearStringCopyCounts () işlevi eklendi.
- KasSwap () 'a bazı SFINAE sihrini ekleyerek, geçici bir nesneye kopyalamak yerine, SwapContents () öğesini çağırarak değişecektir.
- Bir başlatıcı listesi oluşturucu ve Kuyruk sınıfına AddTailMulti () öğesinin aşırı yüklenmesi eklendi (yalnızca -DMUSCLE_USE_CPLUSPLUS11 tanımlandığında kullanılabilir)
- Yeni C ++ 11 şablon ayrıştırma desteğiyle çakışmaları önlemek için Queue :: AddTail () öğesinin Kuyruk ve dizi aşırı yüklemelerini AddTailMulti () olarak yeniden adlandırın.
- Yeni C ++ 11 şablon ayrıştırma desteğiyle çakışmaları önlemek için Queue :: AddHead () öğesinin Kuyruk ve dizi aşırı yüklemelerini AddHeadMulti () olarak yeniden adlandırın.
- MCRASH_IMPL makrosunu bir çağrıyla değiştirmeyi (false) değiştirin.
- Biraz daha Android uyumlu tweakage.
- Testler klasöründeki programların çoğu C ++ 11 altında derlenmedi. Düzeltildi.
- Clang'ın statik analiz aracı tarafından algılanan birkaç potansiyel hata düzeltildi.
Sürüm 5.91’de yeni: :
- Hashtable sınıfına EnsureCanPut () kolaylık yöntemi eklendi.
- Kuyruk sınıfına EnsureCanAdd () kolaylık yöntemi eklendi.
- DoMutexAtomicIncrement () işlevini, daha verimli çağırmak için satır içi bir işlev olarak değiştirildi.
- GUI olmayan Qt uygulamalarına izin vermek için QApplication :: postEvent () yerine QCoreApplication :: postEvent () öğesini çağırmak için QMessageTransceiverThread ve QAcceptSocketsThread öğelerini değiştirdiler.
- MUSCLE'ın geliştirilmiş UDP desteğini yansıtmak için Başlangıç Kılavuzu belgesini güncelledi.
- Jean-FranA§ois Mullet tarafından sağlanan bazı Android uyumluluk değişikliklerinde birleştirildi.
- MUSCLE_USE_MUTEXES_FOR_ATOMIC_OPERATIONS derleme bayrağı kullanımı, bir operasyon sırası sorunu nedeniyle MUSCLE'nin başlatma sırasında çökmesine neden olur. Bu şimdi düzeltildi.
- MUSCLE_USE_MUTEXES_FOR_ATOMIC_OPERATIONS derleme bayrağı daha önce sadece AtomicCounter'ın başka bir uygulaması mevcut değilse kullanıldı. Şimdi, bayrağı daha yüksek önceliğe sahiptir, bu yüzden bayrağı ayarlamak Mutex'lerin kullanılacağı anlamına gelir, başka bir (daha verimli) mekanizma mevcut olsa bile.
Sürüm 5.90’da yeni: :
- Ağ geçidi kodunun UDP tarzı paketlenmiş iletişimi daha akıllıca işlemesine izin vermek için DataIO sınıfına bir GetPacketMaximumSize () yöntemi eklendi.
- MessageIOGateway artık UDPSocketDataIO ile birlikte kullanılabilir.
- GetOcjectFromArchiveMessage () işlevini GetArchiveMessageFromPool () vb. için geri yükleme tarafındaki bir muadili olarak sunmak üzere Message.h işlevine eklenmiş.
- AtomicCounter :: AtomicIncrement () şimdi bir boole döndürüyor (yeni sayaç değeri bire eşittir).
- HashtableIterator sınıfını, HTIT_FLAG_NOREGISTER bayrağı belirtilmemiş olsa bile salt okunur Hashtable yinelemelerinin artık iş parçacığı güvenliğini sağlamak için değiştirildi.
- Uygulama kimliği olmayan bir biçimde bir iş parçacığı kimliğini doğru şekilde göstermek için SetupSystem.h dosyasına bir muscle_thread_id sınıfı eklendi.
- & quot; kilitlenme & quot; Testler klasörüne program. Bu program, deadlockfinder testini kullanmanın / göstermenin bir yolu olarak kasıtlı olarak bir kilitlenme yaratma riskiyle karşı karşıyadır.
- Otomatik iplik güvenliğini aşmaktan kaçınmak ve HTIT_FLAG_NOREGISTER argümanlarını gerektiğinde el ile vermeyi taahhüt etmek isteyenler için bir -DMUSCLE_AVOID_THREAD_SAFE_HASHTABLE_ITERATORS komut satırı bayrağı desteği eklendi.
- GetHostByName () işlevine isteğe bağlı bir LRU arama önbelleği ekledi, böylece aynı ana makine adları tekrar tekrar çözüldüğünde daha hızlı geri dönebilir.
- GetHostByName () öğesinde LRU arama önbelleğini etkinleştiren ve ayarlayan bir SetHostNameCacheSettings () işlevi eklendi.
- & quot; dnscache & quot; için destek eklendi ve & quot; dnscachesize & quot; LRU arama önbelleğinin davranışının komut satırı belirtimine izin vermek için HandleStandardDaemonArgs () komut satırında argümanlar.
- Hashtable sınıfını değiştirerek _iterHead, _iterTail ve _freeHead üye değerlerinin bellek kullanımını azaltmak için imleç yerine uint32s olmasını sağlayın.
- ThreadLocalStorage :: SetFreeHeldObjectsOnExit () yöntemini kaldırdı ve pthreads, pthread_key_create () çağrıldıktan sonra bu ayarı değiştirmenize izin vermediğinden, yapıcısına bir boolean argümanı ekledi.
- GetCurrentThreadID () öğesini statik üye işlevi olarak muscle_thread_id sınıfına taşıdı ve onu imzasız uzun yerine kas_thread_id nesnesine döndürecek şekilde değiştirdi.
- Bilinen bir IP adresi olmayan oturumlar için varsayılan ana makine adını değiştir & quot; & quot; & quot; & quot; _unknown_ & quot; için, eski dizedeki açılı ayraçlar, 5.84 sürümünden itibaren özel bir anlama sahiptir ve bu, düğüm yolu eşlemesini, istenmeyen yollarla engelleyebilir.
- Message.cpp'deki CalculateChecksum () yöntemleri, veri aktarım farklarının saptanmasında daha sağlam olacak şekilde değiştirildi.
- QictomicInt sınıfı, AtomicIncrement () yönteminin yeni dönüş değerinin gerektirdiği işlevselliği desteklemediğinden, AtomicCounter.h dosyasındaki MUSCLE_USE_QT_FOR_ATOMIC_OPERATIONS desteğini kaldırdı.
- MessageIOGateway :: FlattenMessage () ve MessageIOGateway :: UnflattenMessage () kaldırıldı. Onların yerine eklendi: MessageIOGateway :: FlattenHeaderAndMessage () ve MessageIOGateway :: UnflattenHeaderAndMessage (). Bu yeni yöntemler, hem başlık baytları hem de İleti gövdesiyle aynı anda ilgilenir.
- Windows altında udpproxy derlemesine yardımcı olmak için testler klasörüne bir udpproxy.vcproj dosyası eklendi.
- Mesaj: Flatten () şimdi Mesajdaki alanların üzerinde bir kez yerine iki kez yerine geçecektir.
- GetCurrentThreadID () şimdi satır içi bir işlevdir, çünkü şimdi HashtableIterator tarafından sık sık aranabilir.
- Kas_dread_id bir Hashtable anahtar türü olarak kullanılamayacağından, Deadlock yerine Queues kullanmak için deadlockfinder kodunu değiştirdi.
- UDP iletişimi için MessageIOGateway'i doğru şekilde kullanmak üzere sabit testudp.cpp.
- FilePathInfo.cpp dosyasındaki ifdefs'yi biraz daha fazla değiştirdiyseniz, sağlamadığı MacOS / X SDK'lerini kullanırken statInfo.st_birthtimespec'e erişilemeyecektir.
- MessageDataIOGateway artık, zlib ile sınırlandırılmamış bir veri arabelleğinden Yeniden şişiremediğinden bir iletinin Çözümünü kaldırmaya çalışmamaktadır.
- SendDataUDP () yönteminde, SendDataUDP () işlevinin, engelleme modunu kullanarak çok noktaya yayın adresine gönderilirken hatalı bir hata döndürmesine neden olabilecek bir hata düzeltildi ve çıktı arabelleği doldu.
Sürüm 5.85’de yeni: :
- Eklenen LogTime (MUSCLE_LOG_DEBUG), MessageIOGateway :: DoInputImplementation () ve Message :: Unflatten () öğesindeki tüm hata yollarını çağırır, böylece veri nedeniyle TCP bağlantılarının ne zaman iptal edileceğini belirlemek daha kolay olur yozlaşma.
- true iff errno öğesinin EINTR veya ENOBUFS olduğunu döndüren bir PreviousOperationHadTransientFailure () işlevi eklendi.
- Spamspersecond = -1 değerini belirtmek artık hexterm'in spam verilerini olabildiğince hızlı göndermesine neden olacaktır.
- SocketMultiplexer.h'ın MUSCLE_USE_POLL uygulaması WSAPoll () için POLLERR sağladı, ancak WSAPoll () POLLERR'ı desteklemiyor, bu durumda WSAPoll () bir hata döndürecektir. Windows altında derlerken POLLERR'i filtreleyerek sorun etrafında çalıştı.
- ENOBUFS, ölümcül bir durum olmasa bile ENOBUFS döndüren () döndürme soket bağlantısının sonlandırılabileceği bir hata düzeltildi.
- SocketMultiplexer.cpp, MUSCLE_USE_POLL tanımlandığında derlenmez. Düzeltildi.
- ZLibCodec :: Deflate () yöntemi, tüm verileri çok büyük bir arabellekte sıkıştırır (ör., 42MB üzerinde). Düzeltildi.
Sürüm 5.84’de yeni: :
- StringMatcher sınıfının sayısal aralıklı sözdizimi genişletildi, böylece birden fazla aralık belirtebilirsiniz. Örneğin, & quot; & quot; "19", "20", "21", "25", "30", "31", "..." ve "50" dizileri ile eşleşir.
- GetCurrentTime64ForRunTime64 () ve GetRunTime64ForCurrenTime64 () dönüşüm işlevleri TimeUtilityFunctions.h dosyasına eklendi.
- DataNode sınıfına bir GetDescendant () yardımcı programı yöntemi eklendi.
- Karmaşık, Sıra, Dize, İleti ve ByteBuffer sınıflarına C ++ 11 taşıt yapıcıları ve taşıma atama operatörleri eklendi. Eski derleyicilerle geriye dönük uyumluluk için, bu kod sadece derleme satırında -DMUSCLE_USE_CPLUSPLUS11 belirtilmişse derlenecektir.
- SharedMemory sınıfı, -DMUSCLE_FAKE_SHARED_MEMORY belirtilmişse artık kendisini paylaşımlı olmayan bir bellek sınıfına yönlendirecektir.
- Testler klasörüne bir testfilepathinfo testi eklendi.
- 2000-2013 Meyer Sesini okumak için tüm telif hakkı bildirimlerini güncelledi.
- C ++ 11 derleyicileri mutlu etmek için makro jetonları (ör. UINT32_FORMAT_SPEC) ve dize sabitleri (ör. "Merhaba") arasında boşluklar eklendi.
- ByteBuffer.cpp'nin büyük-endian ana bilgisayarlarda derlemesini engelleyecek bir sözdizimi hatası vardı. Düzeltildi.
- Yalnızca MacOS / X: Kullanımdan kaldırılan Karbon işlevi çağrıları, 10.8.x'in altındaki kullanımdan kaldırma uyarılarını önlemek için, Mach eşdeğerleri ile değiştirildi.
Sürüm 5.83'teki nedir:
- InflateByteBuffer () ve DeflateByteBuffer () 'ın kullanışlılık sürümleri eklendi. bir bağımsız değişken olarak bir ByteBufferRef al.
- Bazı eski / kullanılmayan yöntemler (EnsureBufferSize () ve FreeLargeBuffer ()), AbstractMessageIOGateway sınıfından kaldırıldı.
- Delphi alt klasöründeki yorumlarda bazı yazım hataları düzeltildi.
- Hashtable sınıfı, -DMUSCLE_AVOID_MINIMIZED_HASHTABLES tanımlı MSVC altında derlendiğinde artık uyarı üretmiyor.
- (preferIPv4Style) öğesi false olarak ayarlandığında IPv4 adres dizelerinin belirsiz bir şekilde biçimlendirilmesine neden olan bir IPAddressAndPort :: ToString () dosyasında bir hata düzeltildi.
Yorum Bulunamadı