MUSCLE staan vir Multi User Server Client Linkage Environment en is 'n oop bron, gratis, robuuste, skaalbare en kruis platform messaging-stelsel wat bestaan uit bediener- en klientkomponente. Dit sal jou help om allerhande gediversifiseerde sagteware, van multiplayer-speletjies en IRC-kliek-kliënte, na SETI-berekeningsprogramme te skryf.
Funksies in 'n oogopslag
Met MUSCLE kan gebruikers die ingesluit "gespierde bediener" maklik aanpas deur hul eie sessie logika of boodskap-streaming protokol te definieer. Die sagteware help jou om jou kliëntkode in een van die programmeringstale C ++, C, C #, Java, Delphi of Python te skryf.
Die program gebruik BMessage-like spiere :: Boodskappe, ondersteun die stuur van afgeplatte spiere :: Boodskappe tussen rekenaars via TCP (Transmission Control Protocol) strome, ontplooi 'n 'gespierde bediener' op 'n bediener masjien, sodat u kliëntprogramme kan skryf wat gebruik kan word om met die bediener te kommunikeer.
Daarbenewens bevat dit enkel-en multi-threaded messaging API's wat al die voormelde programmeertale ondersteun. Die "gespierde bediener" kan maklik aangepas word deur 'n boodskap-streaming protokol of 'n sessie logika te definieer.
Aan die begin met MUSCLE
Na 'n suksesvolle inskrywing kan die kliëntprogramme bepaal wie anders aangeteken is in die sentrale bediener, asook om spiere op te slaan :: Boodskappe in die RAM (stelselgeheue) en stuur spiere :: Boodskappe aan ander kliënte wat verbind is na die bediener. Let asseblief daarop dat kliëntprogramme kan inteken op spesifieke data op die bediener, en kry onmiddellike kennisgewings wanneer die data verander.
Ondersteun 'n wye verskeidenheid van boodskap roetes
Die sagteware is ontwerp om 'n wye verskeidenheid boodskapverwysings te ondersteun, insluitend unicast-styl, uitsendingstyl en multicast-styl-eenhede deur middel van 'n intelligente, hiërargiese patroon-ooreenstemmende roetermeganisme.
Ondersteunde bedryfstelsels en beskikbaarheid
MUSCLE loop op enige POSIX-bedryfstelsel. Dit word versprei as 'n enkele universele bronne argief waarmee gebruikers die toepassing vir hul GNU / Linux-stelsel kan optimaliseer. Beide 32-bis en 64-bis hardewareplatforms word tans ondersteun.
Wat is nuut in hierdie weergawe:
- toetse / Makefile-mt probeer nie meer toetsreflektering saamstel nie, behalwe wanneer dit uitgevoer word op 'n OS wat toetsrefleksie ondersteun.
- Het 'n paar klein redigeer en herrangskik van die "MUSCLE by Voorbeeld" bladsye.
- Vervang 'n aantal `tags` in die MkDocs met [URL's] (...)
- Privaat-erfenis van CountedObject verwyder van al die klasse wat dit gehad het - nou sluit hulle 'n variabele CountedObject privaatlid in. Dit is net gedoen omdat al die private erfenis die DOxygen erfenisgrafieke was.
- Het 'n DECLARE_COUNTED_OBJECT-makro aan CountedObject.h bygevoeg sodat enige moontlike geheue-oorhoofse van CountedObjects uitgeskakel kan word in gevalle waar objektekening nie verlang word nie.
- Verwyder ondersteuning vir die -DMUSCLE_AVOID_OBJECT_COUNTING en het 'n -DMUSCLE_ENABLE_OBJECT_COUNTING-makro in sy plek bygevoeg. (Dit is, die CountedObject-klas is nou gedeaktiveer en moet eksplisiet aangeskakel word om dit te kan gebruik)
- Bygevoeg 'MUSCLE by Voorbeeld' dokumentasie vir misbruiksfunksies. {cpp, h}
- Verander 'n aantal `tags 'in die MKDocs-bron van MUSCLE-by-voorbeeld in [urls] sodat die metodes wat hulle noem, vinnig hersien kan word.
- bediener / Makefile spesifiseer nou libmuscle.a na die hoof () .o lêer.
- Bepaal 'n paar gcc waarskuwings in die toetsmap (per Mika se voorstelle)
- UnparseFile () het nie sleutelwoorde met spasies korrek aangehaal nie. Vaste.
- Vaste die afhanklikes in die "MUSCLE by Voorbeeld" voorbeelde 'Makefiles.
Wat is nuut in weergawe:
- 'n ShrinkToFit () geriefmetode bygevoeg in die waglys, Hashtable, en string klasse. Hierdie metode krimp die voorwerp sodat die hoeveelheid geheue wat dit toegeken het, intern ooreenstem met die grootte van die data wat dit eintlik hou.
- Hashtable :: VersekerSize () en Wagwoord: Verseker Grootte () neem nou 'n opsionele (allowShrink) argument, wat (indien gestel aan waar) die voorwerp se intern toegewysde skikking herverdeel kleiner as dit groter is as wat nodig is.
- Die buffer-uitbreidingsgedrag van die String-klas het 'n bietjie meer doeltreffend gemaak.
- Het 'n wag bygevoeg teen 'n potensiële oneindige herhaling wat kan voorkom terwyl 'n "OUT OF MEMORY" ingeteken word. fout na 'n geheue toekenning mislukking, indien 'n LogCallback geheue probeer toeken.
Wat is nuut in weergawe 6.01:
- 'n PrependWord () geriefs metode bygevoeg aan die string klas.
- Bygevoeg MetReplacements () geriefmetodes by die String-klas.
- Bygevoeg 'n SetExplicitDelayMicros () metode aan die DetectNetworkConfigChangesSession klas.
- Het 'n IsCopperDetected () -metode by die NetworkInterfaceInfo-klas bygevoeg, sodat die kode kan bepaal of 'n Ethernet-aansluiting 'n kabel daaraan het.
- Het 'n "quietsend" bygevoeg argument tot heksterm.
- Die virtuele metode NetworkInterfacesChanged () in die DetectNetworkConfigChangesSession klas is verander om 'n argument te voer wat uitwys watter netwerk interfaces in die besonder verander het. Hierdie funksionaliteit word tans net onder Linux, MacOS / X en Windows geïmplementeer. Vir ander OS's sal die argument altyd 'n leë lys wees.
- 'n fout in die Linux-implementering van DetectNetworkConfigChangesSession wat 'n segmenteringsfout kan veroorsaak indien recvmsg () 'n fout (bv. as gevolg van 'n sein wat ontvang is), herstel het.
Wat is nuut in weergawe 6.00:
- Omskep die SSLSocketDataIO-klas om beter te werk met nie-blokkerende I / O (in samewerking met die nuwe SSLSocketAdapterGateway-klas).
- Bygevoeg implementerings van SSLSocketDataIO :: SetPrivateKey () en SSLSocketDataIO :: SetCertificate () wat 'n ByteBuffer as 'n argument neem.
- Het 'n SSLSocketAdapterGateway-klas bygevoeg wat gebruik word om OpenSSL se interne staatsmasjien te bestuur wanneer u 'n SSLSocketDataIO-klas met u poort gebruik.
- Voeg SetSSLPrivateKey () en GetSSLPrivateKey () metodes by die ReflectServer-klas, sodat SSL-verifikasie makliker gemaak kan word op alle inkomende TCP-verbindings. Hierdie metodes is beskikbaar iff MUSCLE_ENABLE_SSL is gedefinieer.
- Voeg SetSSLPublicKeyCertificate () en GetSSLPublicKeyCertificate () metodes by die ReflectServer-klas, sodat SSL-verifikasie op uitgaande TCP-verbindings makliker gemaak kan word. Hierdie metodes is beskikbaar iff MUSCLE_ENABLE_SSL is gedefinieer.
- Voeg SetSSLPrivateKey () en SetSSLPublicKeyCertificate () metodes by die MessageTransceiverThread-klas, om die SSL-funksionaliteit makliker te aktiveer as u I / O-skroefdraad gebruik.
- Het 'n ssl_data-lêergids bygevoeg met 'n paar inligting oor die opwekking van OpenSSL openbare / privaat keypairs, en 'n voorbeeld keypair wat gebruik word om OpenSSL te toets.
- Wanneer MUSCLE_ENABLE_SSL gedefinieer is, aanvaar die gespierde nou 'n opsionele 'privatekey = lêernaam' -argument. As gespesifiseer, sal die SSL-modus aangeskakel en gespier word, slegs inkomende TCP-verbindings aanvaar wat publieke sleutels bevat wat ooreenstem met hierdie privaat sleutel / sertifikaat.
- Wanneer MUSCLE_ENABLE_SSL gedefinieer is, sal portablereflectclient en qt_example nou 'n opsionele 'publickey = filename'-argument aanvaar. As dit gespesifiseer word, sal die SSL-modus aangeskakel word en hierdie kliente sal gekoppel word aan die gespierde met behulp van OpenSSL en bied hierdie lêer aan as hul geloofsbriewe.
- Het 'n "Animeer" bygevoeg. boks na die qt_voorbeeld-demo. As dit gekontroleer word, sal die venster sy aanwyser outomaties beweeg. Dit is pret en ook nuttig as jy 'n scenario wil toets waar verskeie kliënte gelyktydig verkeer genereer.
- Het die qt_example demo mooier gemaak.
- Hernoem die C ++ 11-helper-makros in Hashtable.h en Queue.h om hulle minder geneig om te bots met ander pakkette se makro's. * Vaste paar geringe foute in die SSLSocketDataIO klas. o Hernoem SSLSocketDataIO :: SetKey () om SetPrivateKey () te stel. o Hernoem SSLSocketDataIO :: SetCertificate () om SetPublicKeyCertificate (). o AbstractMessageIOGateway :: SetDataIO () is nou 'n virtuele metode.
Wat is nuut in weergawe 5.92:
- Verbeterde ondersteuning vir C + + 11-beweging-semantiek in die wachtrij- en Hashtable-klasse (slegs geaktiveer wanneer -DMUSCLE_USE_CPLUSPLUS11 gedefinieer is)
- Voeg instrumentasie by die String-klas sodat ek kan kyk hoeveel keer 'n String-voorwerp gekopieer, verskuif, ens. word (slegs geaktiveer wanneer -DMUSCLE_COUNT_STRING_COPY_OPERATIONS gedefinieer is)
- Bygevoeg 'n PrintAndClearStringCopyCounts () funksie wat die String-operasie data wat hierbo versamel is, sal druk.
- Voeg SFINAE magie by spierwapen () sodat dit sal ruil deur SwapContents () te skakel as dit moontlik is, eerder as om na 'n tydelike voorwerp te kopieer.
- Bygevoeg 'n initialisator-lyskonstruksie en oorlading AddTailMulti () na die wachtrijklas (slegs beskikbaar as -DMUSCLE_USE_CPLUSPLUS11 is natuurlik gedefinieer)
- Hernoem die wachtrij en die oorskot van die wachtrij Queue :: AddTail () na AddTailMulti () om konflikte te vermy met die nuwe C + + 11-sjabloon parsing ondersteuning.
- Hernoem die wachtrij en die oorskot van die wachtrij Queue :: AddHead () na AddHeadMulti () om konflikte te vermy met die nuwe C + + 11-sjabloon parsing ondersteuning.
- Vervang MCRASH_IMPL-makro met 'n oproep om te bevestig (vals).
- 'N bietjie meer Android-verenigbaarheid tweakage.
- Baie van die programme in die toetsmap was nie onder C ++ 11 saamgestel nie. Vaste.
- Vaste verskeie moontlike foute wat deur clang se statiese analise-instrument opgespoor is.
Wat is nuut in weergawe 5.91:
- Bygevoeg VersekerCanPut () geriefmetode aan die Hashtable-klas.
- Bygevoeg VersekerCanAdd () geriefsmetode by die klaswachtrij.
- Verander DoMutexAtomicIncrement () om 'n inline-funksie te wees om dit doeltreffend te noem.
- Verander QMessageTransceiverThread en QAcceptSocketsThread om QCoreApplication :: postEvent () eerder as QApplication :: postEvent () te skakel, om nie-GUI Qt apps toe te laat.
- Opdateer die Beginnersgids-dokument om die verbeterde UDP-ondersteuning van MUSCLE te weerspieël.
- Gekombineer in sommige veranderings van Android-verenigbaarheid wat deur Jean-FranA§ois Mullet verskaf word.
- Gebruik van die MUSCLE_USE_MUTEXES_FOR_ATOMIC_OPERATIONS-samestelling-vlag sal veroorsaak dat MUSCLE tydens opstart as gevolg van 'n bestelling-van-operasieprobleem ineenstort. Dit is nou opgelos.
- Die MUSCLE_USE_MUTEXES_FOR_ATOMIC_OPERATIONS-samestelling-vlag is voorheen slegs gebruik indien geen ander implementering van AtomicCounter beskikbaar was nie. Nou het die vlag hoër prioriteit, dus die opstel van die vlag beteken dat Mutexes gebruik sal word, selfs al is daar nog 'n (meer doeltreffende) meganisme beskikbaar.
Wat is nuut in weergawe 5.90:
- Het 'n GetPacketMaximumSize () -metode by die DataIO-klas gevoeg, sodat die gateway-kode meer intelligente kommunikasie met UDP-styl kan hanteer.
- MessageIOGateway werk nou handig in samewerking met UDPSocketDataIO.
- Bygevoeg CreateObjectFromArchiveMessage () templated funksies aan Message.h, om as 'n herstelkant-eweknie te dien vir GetArchiveMessageFromPool (), ens.
- AtomicCounter :: AtomicIncrement () gee nou 'n boolean (ware iff, die nuwe tellerwaarde is gelyk aan een).
- Die HashtableIterator-klas verander, sodat leesbare Hashtable iterations nou veilige is, selfs al is die HTIT_FLAG_NOREGISTER-vlag nie gespesifiseer nie.
- Voeg 'n spier_debout-klas by SetupSystem.h toe, om 'n draad-ID op 'n implementeringsneutrale manier te verteenwoordig.
- Het 'n "deadlock" bygevoeg Program na die toetsmap. Hierdie program hou doelbewus die skep van 'n dooiepunt, as 'n manier om die deadlockfinder toets uit te oefen / te demonstreer.
- Bygevoeg ondersteuning vir 'n -DMUSCLE_AVOID_THREAD_SAFE_HASHTABLE_ITERATORS command line vlag, vir diegene wat eerder die oorhoofse outomatiese draad veiligheid wil vermy en belowe om HTIT_FLAG_NOREGISTER argumente per hand te verskaf waar nodig.
- Voeg 'n opsionele LRU-opsoekkas by die GetHostByName () funksie, sodat dit vinniger kan terugkeer wanneer dieselfde host name oor en oor opgelos word.
- Het 'n SetHostNameCacheSettings () funksie bygevoeg wat die LRU-opsoekkas in GetHostByName () kan aanpas en aanpas.
- Bygevoeg ondersteuning vir "dnscache" en "dnscachesize" bevellyn argumente in HandleStandardDaemonArgs (), om die opdrag lynspesifikasie van die gedrag van die LRU-soekkas toe te laat.
- Verander die Hashtable klas sodat die _iterHead, _iterTail, en _freeHead lidwaardes nou uint32s eerder as wenke is om die geheueverbruik te verminder.
- Die ThreadLocalStorage :: SetFreeHeldObjectsOnExit () -metode verwyder en voeg 'n boolean-argument aan sy konstruktor in plaas, aangesien pthreads nie toelaat dat jy daardie instelling verander nadat pthread_key_create () genoem is nie.
- Het GetCurrentThreadID () in die muscle_thread_id-klas as 'n statiese lidfunksie verplaas, en dit verander om 'n spier_deksel-item eerder as ongetekende lank te gee.
- Die standaard hostnaam verander vir sessies sonder 'n bekende IP-adres vanaf '& quot; tot "_unknown_", aangesien die hoekhakies in die vorige string 'n spesiale betekenis het as van die 5,84-vrylating, en dit kan inmeng met die noduspad wat ooreenstem met onbedoelde maniere.
- Die berekeningsmetodes CalculateChecksum () in Message.cpp is aangepas om meer robuust te wees om data-omsettingsverskille op te spoor.
- Die MUSCLE_USE_QT_FOR_ATOMIC_OPERATIONS-ondersteuning van AtomicCounter.h verwyder, aangesien Qt se QAtomicInt-klas nie die funksionaliteit ondersteun wat die AtomicIncrement () -metode se nuwe terugkeerwaarde vereis nie.
- Verwyder MessageIOGateway :: FlattenMessage () en MessageIOGateway :: UnflattenMessage (). Bygevoeg in hul plek: MessageIOGateway :: FlattenHeaderAndMessage () en MessageIOGateway :: UnflattenHeaderAndMessage (). Hierdie nuwe metodes hanteer beide die koptekste en die Boodskapliggaam terselfdertyd.
- Bygevoeg 'n utpproxy.vcproj lêer in die toetsmap, om upproxy onder Windows te help saamstel.
- Boodskap: Flatten () word nou een keer in plaas van twee keer oor die velde in die Boodskap.
- GetCurrentThreadID () is nou 'n inline-funksie, aangesien dit nou dikwels deur HashtableIterator genoem kan word.
- Die deadlockfinder-kode verander om wette eerder as Hashtables te gebruik, aangesien spier_thread_id nie meer as 'n Hashtable-sleutel tipe gebruik kan word nie.
- Vaste testudp.cpp om 'n MessageIOGateway vir sy UDP-kommunikasie behoorlik te gebruik.
- Kliek die Ifdefs in FilePathInfo.cpp 'n bietjie meer sodat StatInfo.st_birthtimespec nie toeganklik sal wees wanneer MacOS / X SDK's gebruik word nie.
- MessageDataIOGateway probeer nie meer 'n boodskap van 'n zlib-deflated databuffer ontbloot wat dit nie kan opblaas nie.
- 'n fout in SendDataUDP () wat veroorsaak dat SendDataUDP () foutief 'n fout opgedoen het wanneer dit na 'n multikast-adres gestuur word deur nie-blokkeermodus te gebruik en die uitvoerbuffer vol was.
Wat is nuut in weergawe 5.85:
- LogTime (MUSCLE_LOG_DEBUG) bygevoeg aan al die foutpaaie in MessageIOGateway :: DoInputImplementation () en Boodskap :: Unflatten (), sodat dit makliker kan bepaal wanneer TCP-verbindings gestaak word as gevolg van data korrupsie.
- Bygevoeg op 'n PreviousOperationHadTransientFailure () funksie, wat die regte iff errno terugstuur, is EINTR of ENOBUFS.
- Om spamspersecond = -1 te spesifiseer, sal nou soveel as moontlik heksterm gestuur word om spam-inligting so gou moontlik te stuur.
- SocketMultiplexer.h se implementering van MUSCLE_USE_POLL was POLLERR aan WSAPoll (), maar WSAPoll () ondersteun nie POLLERR nie, sodat WSAPoll () 'n fout kon terugbring wanneer dit plaasgevind het. Het om die probleem gewerk deur POLLERR uit te filter tydens die opstel onder Windows.
- 'n fout gemaak waar stuur () terugkeer ENOBUFS kan veroorsaak dat die sokverbinding beëindig word, alhoewel ENOBUFS nie 'n noodlottige toestand is nie.
- SocketMultiplexer.cpp sal nie saamstel wanneer MUSCLE_USE_POLL gedefinieer is nie. Vaste.
- Die ZLibCodec :: Deflate () metode sal versuim om al die data in 'n baie groot buffer (bv. meer as 42 MB) te komprimeer. Vaste.
Wat is nuut in weergawe 5.84:
- Die numeriese reeks sintaksis van die StringMatcher-klas is uitgebrei sodat jy nou verskeie reekse kan spesifiseer. Byvoorbeeld, "& quot; sou ooreenstem met snare "19", "20", "21", "25", "30", "31", [...] en "50".
- GetCurrentTime64ForRunTime64 () en GetRunTime64ForCurrenTime64 () omskakelfunksies by TimeUtilityFunctions.h bygevoeg.
- Bygevoeg 'n GetDescendant () nut metode aan die DataNode klas.
- Bygevoeg C + + 11 beweeg-konstrukteurs en skuif-opdrag-operateurs na die Hashtable, Queue, String, Message en ByteBuffer klasse. Vir agteruitkompatibiliteit met ouer samestellers, sal hierdie kode slegs saamgestel word as -DMUSCLE_USE_CPLUSPLUS11 op die kompileerlyn gespesifiseer is.
- SharedMemory klas sal nou self in 'n klas sonder nie-geheue gehef word as -DMUSCLE_FAKE_SHARED_MEMORY gespesifiseer is.
- Het 'n testfilepathinfo-toets by die toetsmap gevoeg.
- Opgedateer alle kopteksten vir kopiereg om 2000-2013 Meyer Sound te lees.
- Bygevoeg spasies tussen makro-tokens (bv. UINT32_FORMAT_SPEC) en snaarkonstantes (bv. "Hello") om C ++ 11-samestellers gelukkig te maak.
- ByteBuffer.cpp het 'n sintaksfout gehad wat verhoed dat dit op groot-endiese leërskare saamgestel word. Vaste.
- Slegs MacOS / X: Vervangde afgedankte Koolstoffunksie oproepe met Mach-ekwivalente, om afwykingswaarskuwings onder 10.8.x te vermy.
Wat is nuut in weergawe 5.83:
- Bykomende gemakweergawes van InflateByteBuffer () en DeflateByteBuffer neem 'n ByteBufferRef as 'n argument.
- Verwyder sommige verouderde / ongebruikte metodes (VersekerBufferSize () en FreeLargeBuffer ()) van die AbstractMessageIOGateway-klas.
- Vaste tik in die kommentaar in die subfiche van delphi.
- Die Hashtable-klas genereer nie meer waarskuwings wanneer dit saamgestel word onder MSVC met -DMUSCLE_AVOID_MINIMIZED_HASHTABLES gedefinieer.
- 'n fout in IPAddressAndPort :: ToString () wat veroorsaak het dat IPv4-adresstringe dubbelsinnig geformateer is, wanneer (preferIPv4Style) op vals gestel is.
Kommentaar nie gevind