A MUSCLE a Multi User Server kliens kapcsolódási környezetét jelenti, és egy nyílt forráskódú, ingyenes, erőteljes, méretezhető és platformon keresztüli üzenetküldő rendszer, amely a kiszolgáló és az ügyfél összetevőkből áll. Segíteni fog Önnek, hogy mindenféle elosztott szoftvert, a többjátékos játékokat és az IRC chat-ügyfeleket írjon a SETI számítási alkalmazásokhoz.
Jellemzők áttekintése
A MUSCLE segítségével a felhasználók egyszerűen testreszabhatják a mellékelt "izmolt szervert" a saját munkamenet logikájuk vagy üzenettovábbítási protokolluk meghatározásával. A szoftver segít megírni ügyfélkódját a C ++, C, C #, Java, Delphi vagy Python programnyelvek bármelyikében.
A program BMessage-szerű izomot használ: Az üzenetek támogatják az összehajtogatott izom elküldését: A számítógépek között a TCP (Transmission Control Protocol) protokollon keresztül küldött üzenetek, az "muszkulált szerver" és a "ldquo; egy kiszolgáló gépen, amely lehetővé teszi, hogy olyan kliens programokat írjon, amelyekkel kommunikálni tud a kiszolgálóval.
Ezenkívül tartalmaz egy- és többszálas üzenetkezelő API-kat, amelyek támogatják a fent említett programozási nyelveket. A & ldquo; izmos szerver & rdquo; egyszerűen testre szabható egy üzenet-streaming protokoll vagy egy munkamenet logika meghatározásával.
A MUSCLE használatának megkezdése
A sikeres bejelentkezés után az ügyfélprogramok meghatározhatják, hogy ki van bejelentkezve a központi kiszolgálóra, valamint tárolja az izomot :: Üzenetek a RAM-ban (rendszermemória), és küldje el az izomot :: Üzenetek más csatlakoztatott ügyfelekhez a szerverre. Kérjük, vegye figyelembe, hogy az ügyfélprogramok előfizethetnek a kiszolgálóra vonatkozó konkrét adatokra, és azonnali értesítéseket kaphatnak az adatok megváltoztatásakor.
Támogatja az üzenetsorozatok széles körét
A szoftvert úgy tervezték, hogy az intelligens, hierarchikus mintázat-illesztő irányító mechanizmus segítségével széles körű üzenettovábbításokat támogasson, beleértve az unicast stílusú, az adásstílusú és a multicast-stílusúakat is.
Támogatott operációs rendszerek és elérhetőség
A MUSCLE bármilyen POSIX-kompatibilis operációs rendszeren fut. Egyetlen univerzális forrás archívumként kerül forgalomba, amely lehetővé teszi a felhasználók számára, hogy optimalizálják a GNU / Linux rendszer alkalmazását. Jelenleg mind a 32 bites, mind a 64 bites hardveres platformok támogatottak.
Az újdonság ebben a kiadásban:
- tesztek / Makefile-mt nem próbálkozik a testreflectsession fordítással, kivéve, ha a tesztreflexiáció támogatja az operációs rendszert.
- A "MUSCLE by Example" és a "MUSCLE by Example" lapok.
- Néhány "címke" helyett az MkDocs-ban [URL-ekkel] (...)
- A CountedObject privát örökségét eltávolította minden olyan osztályról, amelyik rendelkezett - most egy CountedObject privát tag változót tartalmaznak. Ezt csak azért tették meg, mert az összes privát örökség felborította a DOxygen öröklési grafikonokat.
- Hozzáadott egy DECLARE_COUNTED_OBJECT makrót CountedObject.h-hoz, hogy a CountedObjects esetleges memóriafelülete megszűnjön olyan esetekben, amikor az objektumszámlálás nem kívánatos.
- eltávolította a -DMUSCLE_AVOID_OBJECT_COUNTING támogatást és hozzáadta a -DMUSCLE_ENABLE_OBJECT_COUNTING makrót a helyére. (Vagyis a CountedObject osztály mostantól le van tiltva, és használatához explicit módon engedélyezni kell)
- Hozzáadott "MUSCLE by Example" a MiscUtilityFunctions dokumentációja. {cpp, h}
- Néhány "címke" -et a MUSCLE-by-Example MkDocs forrásból [urls] -be változtatott, így az általuk említett módszerek gyorsan áttekinthetők. A
- kiszolgáló / Makefile most megadja a libmuscle.a fájlt a fő () .o fájl után.
- Fix néhány gcc figyelmeztetést a teszt mappában (Mika javaslata szerint)
- Az UnparseFile () nem helyes kulcsszavakat idézett. Fix.
- Javította a függőségeket a & quot; MUSCLE by Example & quot; Példák "Makefiles.
- Hozzáadott egy ShrinkToFit () kényelmes módszert a sorhoz, a Hashtable-hez, és a String osztályok. Ez a módszer összezsugorítja az objektumot úgy, hogy a belsőleg hozzárendelt memória mennyisége megegyezzen az általa ténylegesen tárolt adatok méretével.
- Hashtable :: EnsureSize () és queue :: Az EnsureSize () egy opcionális (allowShrink) argumentumot tartalmaz, amely (ha igazra van állítva) lehetővé teszi az objektum belsőleg hozzárendelt tömbének kisebb összegű átcsoportosítását, ha a nagyobb, mint szükséges.
- Csökkentette a String-osztály puffer-bővítési viselkedését, hogy egy kicsit hatékonyabb legyen.
- Hozzáadott egy védelmet a potenciális végtelen rekurzió ellen, amely előfordulhat egy "OUT OF MEMORY" hiba a memóriaelosztás meghiúsulása után, ha a LogCallback megpróbálta felosztani a memóriát.
- Hozzáadott egy PrependWord () kényelmi módszert a String osztályhoz.
- Hozzáadva a () kényelmességi módszerek hozzáadásával a String osztályhoz.
- Hozzáadott egy SetExplicitDelayMicros () metódust a DetectNetworkConfigChangesSession osztályhoz.
- Hozzáadott egy IsCopperDetected () metódust a NetworkInterfaceInfo osztályhoz, így a kód meg tudja állapítani, hogy az Ethernet csatlakozóhoz kábel van-e csatlakoztatva.
- Hozzáadott egy & quot; quietsend & quot; argumentum a hextermhez.
- A DetectNetworkConfigChangesSession osztályban a NetworkInterfacesChanged () virtuális módszer megváltozott, hogy egy olyan érvet hozzon létre, amely felhívja a figyelmet arra, hogy melyik hálózati interfész vált különösen. Ez a funkció jelenleg csak Linux, MacOS / X és Windows alatt fut. Más operációs rendszerek esetében az argumentum mindig üres lista lesz.
- Fix egy hibát a DetectNetworkConfigChangesSession Linux végrehajtásában, amely szegmentálási hibát okozhat, ha a recvmsg () hibát adott vissza (például egy fogadott jel miatt).
- Az SSLSocketDataIO osztály újbóli javítása a nem blokkoló I / O-val (az új SSLSocketAdapterGateway osztálysal együtt) javítva működik.
- Hozzáadott SSLSocketDataIO :: SetPrivateKey () és SSLSocketDataIO :: SetCertificate () implementációk, amelyek egy ByteBuffer argumentumot tartalmaznak.
- Hozzáadott egy SSLSocketAdapterGateway osztály, amelyet az SSLSocketDataIO osztály használata az átjáró segítségével az OpenSSL belső állapotkezelő gépének kezelésére szolgál.
- Hozzáadta a SetSSLPrivateKey () és a GetSSLPrivateKey () metódusokat a ReflectServer osztályhoz, megkönnyítve az SSL hitelesítést minden bejövő TCP kapcsolaton. Ezek a módszerek elérhetők iff MUSCLE_ENABLE_SSL definiálva.
- Hozzáadta a SetSSLPublicKeyCertificate () és a GetSSLPublicKeyCertificate () metódusokat a ReflectServer osztályhoz, megkönnyítve az SSL-hitelesítést a kimenő TCP-kapcsolatokon. Ezek a módszerek elérhetők iff MUSCLE_ENABLE_SSL definiálva.
- Hozzáadta a SetSSLPrivateKey () és a SetSSLPublicKeyCertificate () metódusokat a MessageTransceiverThread osztályhoz, az SSL funkciók egyszerűbb engedélyezéséhez threaded I / O használatakor.
- Hozzáadott egy ssl_data mappát az OpenSSL nyilvános / privát kulcspárokról és az OpenSSL teszteléséhez használt példapéldány létrehozásáról.
- A MUSCLE_ENABLE_SSL definiálásakor az izmok most elfogadják az opcionális "privatekey = fájlnév" argumentumot. Meghatározásakor az SSL mód engedélyezve lesz, és az izmok csak olyan bejövő TCP-kapcsolatokat fogadnak el, amelyek nyilvános kulcsokat tartalmaznak, amelyek megfelelnek a privát kulcsnak / tanúsítványnak.
- A MUSCLE_ENABLE_SSL definiálásakor a portablereflectclient és a qt_example elfogadja az opcionális "publickey = fájlnév" argumentumot. Meghatározáskor az SSL mód engedélyezve lesz, és ezek az ügyfelek az OpenSSL használatával kapcsolódnak az izmokhoz és bemutatják ezt a fájlt hitelesítő adatokként.
- Hozzáadott egy & quot; Animate & quot; jelölje be a qt_example demo jelölőnégyzetet. Ellenőrzésével az ablak automatikusan mozgatja a kijelzőt. Ez szórakoztató és hasznos, ha olyan forgatókönyvet szeretne tesztelni, ahol több ügyfél generál forgalmat egyszerre.
- A qt_example demo szebbnek bizonyult.
- Átnevezte a C ++ 11 helper makrókat a Hashtable.h és a Queue.h fájlban, hogy kisebb valószínűséggel ütközzenek más csomagok makrókkal. * Rögzített néhány kisebb hibát az SSLSocketDataIO osztályban. o Az SSLSocketDataIO :: SetKey () átnevezte a SetPrivateKey () parancsot. o Az SSLSocketDataIO :: SetCertificate () átnevezte a SetPublicKeyCertificate () függvényt. o AbstractMessageIOGateway :: A SetDataIO () egy virtuális módszer.
- A C ++ 11 mozgássemantikának a Cue és Hashtable osztályokban nyújtott támogatása (csak akkor engedélyezett, ha a -DMUSCLE_USE_CPLUSPLUS11 definiálva van)
- Hozzáadott néhány hangszerelést a String osztályhoz, így megnézhetem, hogy egy String objektumot másolnak, mozgathatók-e stb. (csak akkor engedélyezett, ha -DMUSCLE_COUNT_STRING_COPY_OPERATIONS van definiálva)
- Hozzáadott egy PrintAndClearStringCopyCounts () függvényt, amely kinyomtatja a fenti String-művelet adatokat.
- Hozzáadott egy SFINAE mágiát az muscleSwap () -hoz, hogy swappal hívja fel a SwapContents () -t, ha csak lehetséges, és nem átmásol egy ideiglenes objektumra.
- Hozzáadta az AddTailMulti () inicializáló listás konstruktort és túlterhelést a várólistához (csak akkor elérhető, ha a -DMUSCLE_USE_CPLUSPLUS11 definíciója természetesen)
- Átnevezte a Queue :: AddTail () sor és a tömb túlterheit a AddTailMulti () függvénybe, hogy elkerülje az új C ++ 11 sablonszerkesztési támogatással való ütközést.
- Átnevezte a Queue :: AddHead () sor és a tömb túlterheit az AddHeadMulti () függvénybe, hogy elkerülje az új C ++ 11 sablonszerkesztési támogatással való ütközést.
- Cserélte a MCRASH_IMPL makrót, amelyben állítólag érvényes (false).
- Egy kicsit több Android-kompatibilitási csípés.
- Számos program a teszt mappában nem fordult elő a C ++ 11 alatt. Fix.
- Meghatározta azokat a potenciális hibákat, amelyeket a clang statikus elemző eszközzel észleltek.
- Hozzáadta az EnsureCanPut () kényelmi módszert a Hashtable osztályhoz.
- Hozzáadta az EnsureCanAdd () kényelmi módszert a várólistához.
- A DoMutexAtomicIncrement () módosította egy lineáris függvényt, hogy hatékonyabbá tegye.
- Megváltozott QMessageTransceiverThread és QAcceptSocketsThread hívja a QCoreApplication :: postEvent () helyett a QApplication :: postEvent () parancsot, hogy a nem GUI Qt alkalmazások legyenek engedélyezve.
- Frissítette a Kezdő útmutató dokumentumot, hogy tükrözze a MUSCLE javított UDP-támogatását.
- Egyesített Jean-Frana§ois Mullet egyes kompatibilitási változásaival.
- A MUSCLE_USE_MUTEXES_FOR_ATOMIC_OPERATIONS fordító zászló használatával a MUSCLE összeomlik az üzembe helyezéskor egy műveleti megbízás miatt. Ez már rögzült.
- A MUSCLE_USE_MUTEXES_FOR_ATOMIC_OPERATIONS fordító zászlót korábban csak akkor használták, ha az AtomicCounter más megvalósítása nem áll rendelkezésre. Most a zászló nagyobb elsőbbséget élvez, ezért a zászló beállítása azt jelenti, hogy a Mutexes is használható, még akkor is, ha más (hatékonyabb) mechanizmus áll rendelkezésre.
- Hozzáadott egy GetPacketMaximumSize () metódust a DataIO osztályhoz, hogy az átjárókód intelligensabban kezelje az UDP-stílusú csomagkapcsolt kommunikációt.
- Az MessageIOGateway most hasznosan működik az UDPSocketDataIO-val együtt.
- Hozzáadta a CreateObjectFromArchiveMessage () sablonfüggvényeket a Message.h fájlhoz, hogy a GetArchiveMessageFromPool () stb. helyreállító oldalaként szolgáljon.
- AtomicCounter :: AtomicIncrement () most egy boolean (igaz iff az új számláló értéke egyenlő egy) értékkel tér vissza.
- Módosította a HashtableIterator osztályt, így a csak olvasható Hashtable iterációk mostantól szálasak, még akkor is, ha a HTIT_FLAG_NOREGISTER zászló nincs megadva.
- Hozzáadott egy muscle_thread_id osztályt a SetupSystem.h-nak, hogy megfelelően jelenítse meg a témaazonosítót végrehajtás-semleges módon.
- Hozzáadott egy "holtpont" programot a teszt mappába. Ez a program szándékosan veszélyezteti a holtpontot, mint a holtpontkeresõ teszt végrehajtását / bemutatását.
- Hozzáadta a -DMUSCLE_AVOID_THREAD_SAFE_HASHTABLE_ITERATORS parancssori zászló támogatását azok számára, akik inkább elkerülnék az automatikus szálbiztonságot, és megígérhetik, hogy a HTIT_FLAG_NOREGISTER argumentumokat szükség szerint kézzel kézbesítik.
- Hozzáadott egy opcionális LRU keresési gyorsítótárat a GetHostByName () függvényhez, így gyorsabban térhet vissza, ha ugyanazok a gazdanevek újra és újra megoldódnak.
- Hozzáadott egy SetHostNameCacheSettings () függvényt, amely engedélyezi és beállítja az LRU keresési gyorsítótárát a GetHostByName () szolgáltatásban.
- Hozzáadta a & quot; dnscache & quot; és "dnscachesize" a HandleStandardDaemonArgs () parancssori argumentumait, hogy engedélyezhesse az LRU keresési gyorsítótár viselkedését.
- Módosította a Hashtable osztályt, hogy a _iterHead, _iterTail és _freeHead tag értékek most inkább uint32s legyenek, mint mutatók, csökkentve a memóriahasználatot.
- Eltávolította a ThreadLocalStorage :: SetFreeHeldObjectsOnExit () metódust, és helyette hozzáadta a logikai argumentumot a konstruktorhoz, mivel a pthreads nem engedélyezi a beállítás módosítását a pthread_key_create () meghívás után.
- A GetCurrentThreadID () -t statikus tag függvényként az muscle_thread_id osztályba helyezte át, és megváltoztatta azt, hogy visszaadja az muscle_thread_id objektumot, és nem az aláírás hosszú időt.
- Az ismert IP-cím nélküli munkamenetek alapértelmezett állomásnevét a (z) & quot; & quot; hogy a korábbi karakterláncban lévő szögletes zárójelek az 5,84-es kiadásnál különleges jelentéssel bírnak, és nem kívánt módon érinthetik a csomópont-összerendelést.
- A Message.cpp CalculateChecksum () metódusai módosultak, hogy robusztusabbak legyenek az adatátvitel különbségeinek észlelésekor.
- A MUSCLE_USE_QT_FOR_ATOMIC_OPERATIONS támogatás eltávolítása az AtomicCounter.h-ból, mivel a Qt's QAtomicInt osztály nem támogatja az AtomicIncrement () metódus új visszatérési értékéhez szükséges funkciókat.
- Eltávolított MessageIOGateway :: FlattenMessage () és MessageIOGateway :: UnflattenMessage (). Hozzáadva a helyükön: MessageIOGateway :: FlattenHeaderAndMessage () és MessageIOGateway :: UnflattenHeaderAndMessage (). Ezek az új módszerek egyaránt foglalkoznak a fejléc bájtjaival és az Üzenetek testével.
- Hozzáadott egy udpproxy.vcproj fájlt a tesztek mappájába, hogy segítsen összeállítani a udpproxy rendszert a Windows alatt.
- Üzenet: A Flatten () mostantól az üzenet mezők fölé kerül, kétszer anélkül.
- A GetCurrentThreadID () most egy inline függvény, mivel mostantól a HashtableIterator gyakran hívja.
- Módosította a holtpontkeresőkódot a Hashtables helyett a Várólisták használatára, hiszen az muscle_thread_id nem használható Hashtable kulcs típusként.
- Fix testudp.cpp-t használva a MessageIOGateway használatához az UDP kommunikációhoz.
- Csinálta az ifdefs fájlt egy kicsit a FilePathInfo.cpp fájlban, így a statInfo.st_birthtimespec nem fér hozzá MacOS / X SDK-k használatakor, amelyek nem adják meg.
- A MessageDataIOGateway többé nem próbálja meg eltávolítani egy üzenetet egy zlib által deflált adatpufferről, amelyet nem tudott újra feltölteni.
- Javított egy hibát a SendDataUDP () -en, amely a SendDataUDP () függvényében hibát okozhat, ha multicast címre küldi a nem blokkoló üzemmódot, és a kimeneti puffer tele van.
- Hozzáadta a LogTime (MUSCLE_LOG_DEBUG) hívásokat a MessageIOGateway :: DoInputImplementation () és az Message :: Unflatten () üzenetben lévő összes hibapontra, így könnyebben meghatározható, ha a TCP-kapcsolatok megszakadnak az adatok miatt korrupció.
- Hozzáadott egy PreviousOperationHadTransientFailure () függvényt, amely az true iff errno értéket adja vissza EINTR vagy ENOBUFS.
- A spamspersecond = -1 megadásával a hexterm a lehető leggyorsabban küldhet spam adatokat.
- A SocketMultiplexer.h MUSCLE_USE_POLL implementációja a POLLERR-t a WSAPoll () -hoz szállította, de a WSAPoll () nem támogatja a POLLERR-et, így a WSAPoll () hibaüzenet jelenhet meg. A probléma körülkerült a POLLERR szűrése során a Windows alatt végzett fordítás során.
- Javítva egy olyan hiba, ahol az ENOBUFS visszaküldésével járó send () okozhat az aljzat-kapcsolatot, annak ellenére, hogy az ENOBUFS nem halálos kimenetelű állapot.
- A SocketMultiplexer.cpp nem fordul elő, ha a MUSCLE_USE_POLL definiálásra került. Fix.
- A ZLibCodec :: Deflate () metódus nem tud tömöríteni minden adatot egy nagyon nagy pufferben (például több mint 42 MB). Fix.
- A StringMatcher osztály numerikus tartományú szintaxisát kibővítettük, így most több tartományt adhat meg. Például a & quot; & quot; a "19", a "20", a "21", a "25", a "30", a "31", a [...] és az "50"
- Hozzáadta a GetCurrentTime64ForRunTime64 () és a GetRunTime64ForCurrenTime64 () konverziós funkciókat a TimeUtilityFunctions.h fájlhoz.
- Hozzáadott egy GetDescendant () segédprogram metódust a DataNode osztályhoz.
- Hozzáadta a C ++ 11 mozgás-konstruktorokat és a mozgás-hozzárendelés-operátorokat a Hashtable, Queue, String, Message és ByteBuffer osztályokhoz. A régebbi fordítókkal való visszafelé kompatibilitás érdekében ez a kód csak akkor fordul elő, ha a fordító sorban a -DMUSCLE_USE_CPLUSPLUS11 szerepel.
- A SharedMemory osztály most nerf egy nem megosztott memóriaosztályba, ha -DMUSCLE_FAKE_SHARED_MEMORY van megadva.
- Hozzáadott egy tesztfilepathinfo tesztet a teszt mappához.
- Frissített minden szerzői jogi figyelmeztetés fejlécét, hogy elolvashassa a Meyer Sound 2000-2013-as verzióját.
- Hozzáadott szóközök a makrójelek (például UINT32_FORMAT_SPEC) és a sztring állandók között (például "Hello"), hogy a C ++ 11 fordítók boldogok legyenek.
- A ByteBuffer.cpp-nek szintaktikai hibája volt, amely megakadályozná a big-endian gazdagépek fordítását. Fix.
- Csak MacOS / X: Az elavult Carbon függvényhívásokat Mach egyenértékekkel helyettesítette, a 10.8.x alatti elmaradási figyelmeztetések elkerülése érdekében.
- Hozzáadta az InflateByteBuffer () és a DeflateByteBuffer () kényelmes verzióit, amelyek
- Néhány elavult / fel nem használt módszert (EnsureBufferSize () és FreeLargeBuffer ()) eltávolított az AbstractMessageIOGateway osztályból.
- Javítva néhány hibát a delphi almappában szereplő megjegyzésekben.
- A Hashtable osztály már nem generál figyelmeztetéseket MSVC alatt összeállított -DMUSCLE_AVOID_MINIMIZED_HASHTABLES definícióval.
- Fix egy hiba az IPAddressAndPort :: ToString () -ben, amely az IPv4 cím stringeket félreértelmezett formában okozta, amikor (preferIPv4Style) hamis.
Az újdonság a 6.01-es verzióban:
Újdonság a 6.00 verzióban:
Az újdonság az 5.92-es verzióban:
Az újdonság az 5.91 verzióban:
Az újdonság az 5.90-es verzióban:
Az újdonság az 5.85-ös verzióban:
Az újdonság az 5.84-es verzióban:
vegyen egy ByteBufferRef argumentumot.
Hozzászólás nem található