MUSCLE tarkoittaa Multi User Server Client Linkage -ympäristöä ja se on avoimen lähdekoodin, vapaan, tukevan, skaalattavan ja monikäyttöisen viestintäjärjestelmän, joka koostuu palvelimen ja asiakasyhteyden osista. Se auttaa sinua kirjoittamaan kaikenlaisia hajautettuja ohjelmistoja moninpelipeleistä ja IRC-chat-asiakkaista SETI-laskentasovelluksiin.
Ominaisuudet yhdellä silmäyksellä
MUSCLE avulla käyttäjät voivat helposti muokata mukana "lihaksikas palvelin" määrittämällä omat istuntologiikkansa tai sanomanvälitysprotokollansa. Ohjelmiston avulla voit kirjoittaa asiakastunnuksesi jollakin C ++-, C-, C #-, Java-, Delphi- tai Python-ohjelmointikielestä.
Ohjelma käyttää BMessage-kaltaista lihaa. :: Viestit, tukee litistetyn lihaksen lähettämistä. :: Tietokoneiden väliset viestit TCP (Transmission Control Protocol) -virtojen kautta. Käyttää & ldquo; lihaksikas palvelin & rdquo; palvelimella, jonka avulla voit kirjoittaa asiakkaan ohjelmia, joita voidaan käyttää palvelimen kanssa.
Lisäksi se sisältää yksittäisiä ja monisäikeisiä viestintäliittymiä, jotka tukevat kaikkia edellä mainittuja ohjelmointikieliä. & Ldquo; lihaksikas palvelin & rdquo; voidaan helposti räätälöidä määrittämällä viestien välitysprotokolla tai istuntologiikka.
MUSCLE: n käytön aloittaminen
Menestyksellisen kirjautumisen jälkeen asiakasohjelmat voivat määrittää, kuka on kirjautunut keskuspalvelimeen ja tallentanut lihas :: Viestejä RAM-muistissa (järjestelmän muistissa) ja lähettänyt lihakset :: Viestit muille asiakkaille, jotka ovat yhteydessä palvelimelle. Huomaa, että asiakasohjelmat voivat tilata palvelimelle tiettyjä tietoja ja saada välitöntä ilmoitusta, kun tiedot muuttuvat.
Tukee laajaa viestien reititysaluetta
Ohjelmisto on suunniteltu tukemaan laajaa valikoimaa sanomajohtoja, kuten unicast-tyyliä, lähetystyyliä ja monilähetystyyppejä, älykkään, hierarkkisen kuvioinnissa olevan reititysmekanismin avulla.
Tuetut käyttöjärjestelmät ja saatavuus
MUSCLE toimii missä tahansa POSIX-yhteensopivassa käyttöjärjestelmässä. Se on jaettu yhtenäiseksi, yleislähteiden arkistoksi, jonka avulla käyttäjät voivat optimoida sovelluksen GNU / Linux-järjestelmäänsä. Tällä hetkellä tuetaan sekä 32-bittisiä että 64-bittisiä laitteistoja.
Mitä uutta strong> on tässä versiossa:
- testit / Makefile-mt ei enää yritä koota testinäyttöä paitsi, kun suoritat testireflectsession tukee käyttöjärjestelmää.
- Joitakin pienempiä muokkauksia ja uudelleenjärjestelyjä "MUSCLE by Example" sivut.
- Korvattiin useita `tags` MkDocs-tiedostoissa [URL-osoitteilla] (...)
- CountedObjectin yksityinen perintö poistettiin kaikista luokista, joilla oli se - nyt ne sisältävät CountedObject-yksityisen jäsenmuuttujan sijaan. Tämä tapahtui vain siksi, että kaikki yksityinen perintö kauhistivat DOxygenin perintökaaviota.
- Lisättiin DECLARE_COUNTED_OBITECT-makro CountedObject.h: ksi, jotta mahdolliset CountedObjects-muistin mahdolliset ylimääräiset arvot voidaan poistaa tapauksissa, joissa esineiden laskemista ei haluta.
- Siirretty tuki -DMUSCLE_AVOID_OBJECT_COUNTING ja lisäsi -DMUSCLE_ENABLE_OBJECT_COUNTING makro sen sijaan. (Toisin sanoen CountedObject-luokka on nyt pois käytöstä oletusarvoisesti ja sen on oltava nimenomaan käytössä, jotta se voidaan käyttää)
- Lisätty "MUSCLE by Example" dokumentaatio MiscUtilityFunctionsille. {cpp, h}
- Muuta useita `tags` MUSCLE-by-Example MkDocs-lähteestä [url-osoitteisiin] niin, että mainitsemistasi menetelmistä voidaan nopeasti tarkistaa.
- palvelin / Makefile määrittää nyt libmuscle.a-tiedoston pää () .o -tiedoston jälkeen.
- Korjasi joitakin gcc-varoituksia testikansioon (Mikan ehdotusten mukaisesti)
- UnparseFile () ei maininnut avainsanoja, joissa oli välilyöntejä. Kiinteä.
- Korjasi riippuvuudet "MUSCLE by Example" esimerkkejä "Makefiles".
- Lisätty ShrinkToFit () -tapahtumamenetelmä Queue, Hashtable, ja String-luokat. Tämä menetelmä kutistuu objektille niin, että sen sisäinen muistiin tallennettu muisti vastaa niiden tietojen kokoa, jota se todella pitää.
- Hashtable :: EnsureSize () ja jonot :: EnsureSize () antavat nyt valinnaisen (allowShrink) argumentin, joka mahdollistaa objektin sisäisesti allokoidun taulukon uudelleen sijoittamisen pienemmäksi, jos se on suurempi kuin on tarpeen.
- Tweakoi String-luokan puskurin laajennuskäyttäytymisen olevan hieman tehokkaampi.
- Lisätty vartija potentiaalista ääretöntä rekursiota vastaan, joka saattaisi esiintyä, kun kirjaudut "OUT OF MEMORY" virhe muistin allokoinnin epäonnistumisen jälkeen, jos LogCallback yritti jakaa muistia.
- Lisätty PrependWord () -tapahtumamenetelmä String-luokkaan.
- Lisätty WithReplacements () -kompleksit String-luokkaan.
- Lisätty SetExplicitDelayMicros () -menetelmä DetectNetworkConfigChangesSession-luokkaan.
- Lisätty IsCopperDetected () -menetelmä NetworkInterfaceInfo-luokkaan, jotta koodi voi selvittää, onko Ethernet-liittimellä kaapeli kytketty siihen.
- Lisätty & quot; quietsend & quot; argumentti hextermille.
- DetectNetworkConfigChangesSession-luokkaan NetworkInterfacesChanged () -verkkotapa on muuttunut, jotta saadaan argumentti, joka pyytää, mitkä verkkoliittymät ovat erityisesti muuttuneet. Tämä toiminto on tällä hetkellä käytössä vain Linuxissa, MacOS / X: ssä ja Windowsissa. Muiden käyttöjärjestelmien argumentti on aina tyhjä luettelo.
- Korjattu virhe DetectNetworkConfigChangesSessionin Linux-toteutuksessa, joka voi aiheuttaa segmentoitumisvirheen, jos recvmsg () palautti virheen (esim. vastaanotetun signaalin vuoksi).
- Uudelleen SSLSocketDataIO-luokka toimimaan paremmin estävän I / O: n kanssa (yhdessä uuden SSLSocketAdapterGateway-luokan kanssa).
- Lisätty SSLSocketDataIO :: SetPrivateKey () ja SSLSocketDataIO :: SetCertificate (), jotka ottavat ByteBufferin argumenttina.
- Lisätty SSLSocketAdapterGateway-luokka, jota käytetään hallitsemaan OpenSSL: n sisäistä tilakonetta SSLSocketDataIO-luokan avulla yhdyskäytävän kanssa.
- Lisättiin SetSSLPrivateKey () ja GetSSLPrivateKey () -menetelmät ReflectServer-luokkaan, mikä helpottaa SSL-todennuksen mahdollistamista kaikissa tulevissa TCP-yhteyksissä. Nämä menetelmät ovat käytettävissä. Iff MUSCLE_ENABLE_SSL on määritetty.
- Lisättiin SetSSLPublicKeyCertificate () ja GetSSLPublicKeyCertificate () -menetelmät ReflectServer-luokkaan, jotta SSL-todennuksen helpottaminen lähtiessäsi TCP-yhteyksiä. Nämä menetelmät ovat käytettävissä. Iff MUSCLE_ENABLE_SSL on määritetty.
- Lisätty SetSSLPrivateKey () ja SetSSLPublicKeyCertificate () -menetelmät MessageTransceiverThread-luokkaan, jotta SSL-toiminnot voidaan helpommin ottaa käyttöön kierrettyyn I / O: hen.
- Lisätty ssl_data-kansio, jossa on joitain tietoja OpenSSL julkisten / yksityisten avainparien luomisesta sekä esimerkki avainparista käytettäväksi OpenSSL-testauksessa.
- Kun määritetään MUSCLE_ENABLE_SSL, lihakset hyväksyvät nyt valinnaisen "privatekey = filename" argumentin. Kun määritetty, SSL-tila otetaan käyttöön ja lihakset hyväksyvät vain tulevat TCP-yhteydet, jotka näyttävät julkisen avaimet, jotka vastaavat tätä yksityistä avainta / todistusta.
- Kun MUSCLE_ENABLE_SSL on määritetty, portablereflectclient ja qt_example hyväksyvät valinnaisen julkisen avaimen = tiedostonimen argumentin. Kun määritetty, SSL-tila otetaan käyttöön ja nämä asiakkaat muodostavat yhteyden lihaksikseen OpenSSL: n avulla ja esittävät tämän tiedostonsa tunnuksiksi.
- Lisätty & quot; Animaatio & quot; valintaruutu qt_example demoon. Sen tarkistaminen aiheuttaa ikkunan liikkumisen automaattisesti. Tämä on hauskaa ja hyödyllistä myös, jos haluat testata skenaarion, jossa useat asiakkaat tuottavat liikennettä samanaikaisesti.
- Tee qt_example demo kauniimpi.
- Nimeä uudelleen C ++ 11 -avusteiset makrot Hashtable.h: ssä ja Queue.h: ssa, jotta ne eivät todennäköisesti törmää yhteen muiden pakettien makrojen kanssa. * Korjataan pieniä virheitä SSLSocketDataIO-luokassa. o Nimeä SSLSocketDataIO :: SetKey () asetukseksi SetPrivateKey (). o Nimeä SSLSocketDataIO :: SetCertificate () asetukseksi SetPublicKeyCertificate (). o AbstractMessageIOGateway :: SetDataIO () on nyt virtuaalinen menetelmä.
- C ++ 11: n siirrettävän semanttisen sisällön kehittäminen Queue- ja Hashtable-luokissa (käytössä vain, kun -DMUSCLE_USE_CPLUSPLUS11 on määritetty)
- Lisättiin joitain instrumentointeja String-luokkaan, jotta voin seurata, kuinka monta kertaa String-objekti on kopioitu, siirretty jne. (käytössä vain, kun määritetään -DMUSCLE_COUNT_STRING_COPY_OPERATIONS)
- Lisätty PrintAndClearStringCopyCounts () -toiminto, joka tulostaa yllä kerätyt String-toiminnot.
- Lisättiin joitain SFINAE-taika muscleSwap () -muotoon, jotta se vaihtaisi soittamalla SwapContentit () kun mahdollista, eikä kopioimalla väliaikaiseen kohteeseen.
- Lisätty alustajaluettelon konstruktori ja AddTailMulti (): n ylikuormitus jono-luokkaan (käytettävissä vain, kun -DMUSCLE_USE_CPLUSPLUS11 määritellään tietenkin)
- Järjestelmän uudelleennimeäminen Queue :: AddTail () -toiminnon lisäämiseksi AddTailMulti () -toimintoon, jotta vältetään ristiriidat uuden C ++ 11 -mallin jäsentämistukeen.
- Järjestelmän uudelleennimeäminen Queue :: AddHead () -toiminnon lisäämällä AddHeadMulti () -ohjelmaan, jotta vältetään ristiriidat uuden C ++ 11 -mallin jäsentämistukien kanssa.
- Korvattu MCRASH_IMPL-makro, jossa kehotetaan vahvistamaan (false).
- Vähän enemmän Android-yhteensopivuutta.
- Useat testikansion kansiot eivät koota C ++ 11: ssa. Kiinteä.
- Korjasi useita mahdollisia vikoja, jotka havaittiin Clangin staattisen analyysityökalun avulla.
- Lisätty EnsureCanPut () -tapahtumamenetelmä Hashtable-luokkaan.
- Lisätty EnsureCanAdd () -valmiusmenetelmä jonotusluokkaan.
- Muutettu DoMutexAtomicIncrement () on sisäinen toiminto, joka tekee siitä tehokkaamman.
- Muutettu QMessageTransceiverThread ja QAcceptSocketsThread kutsuvat Qorexplus :: postEvent () sijaan QApplication :: postEvent (), jotta ei-GUI Qt apps.
- Päivitettiin aloitusopas-asiakirja, joka heijastaa MUSCLEin parannettua UDP-tukea.
- Yhdistetty eräisiin Jean-François Mullethin tarjoamiin Android-yhteensopivuuteen.
- MUSCLE_USE_MUTEXES_FOR_ATOMIC_OPERATIONS -kompli-lipun käyttäminen aiheuttaisi MUSCLEin kaatumisen käynnistyksen yhteydessä toimeksianto-ongelman vuoksi. Tämä on nyt korjattu.
- MUSCLE_USE_MUTEXES_FOR_ATOMIC_OPERATIONS-kääntämislippua aiemmin käytettiin vain, jos AtomicCounter-sovellusta ei ollut saatavilla. Nyt lipulla on korkeampi etuoikeus, joten lipun asettaminen tarkoittaa sitä, että Mutexia käytetään, vaikka toinen (tehokkaampi) mekanismi on käytettävissä.
- Lisätty GetPacketMaximumSize () -menetelmä DataIO-luokkaan, jotta yhdyskäytäväkoodi voidaan käsitellä älykkäästi UDP-tyyppisessä pakettivälitteisessä viestinnässä.
- MessageIOGateway toimii nyt yhdessä UDPSocketDataIO: n kanssa.
- Lisättiin CreateObjectFromArchiveMessage () -tyyppiset funktiot Message.h: iin, jotta ne toimisivat GetArchiveMessageFromPool (): n palautuspuolen vastapuolena jne.
- AtomicCounter :: AtomicIncrement () palauttaa nyt boolean (tosi iff uuden laskurin arvo on yhtä kuin yksi).
- Modifioi HashtableIterator-luokka niin, että vain luku -tyyppiset Hashtable-iteroinnit ovat nyt säikeitä, vaikka HTIT_FLAG_NOREGISTER-lippua ei ole määritetty.
- Lisättiin muscle_thread_id-luokka SetupSystem.h: een, jotta ne edustaisivat oikein thread-ID: n täytäntöönpanoon neutraalisti.
- Lisätty "umpikujaan" ohjelma testikansioon. Tämä ohjelma on tietoinen riski luoda umpikuja, jotta voit käyttää / osoittaa deadlockfinder -testiä.
- Lisätty tuki -DMUSCLE_AVOID_THREAD_SAFE_HASHTABLE_ITERATORS komentorivin lippu, niille, jotka mieluummin välttävät ylimääräisen automaattisen tietoturvallisuuden ja lupaa toimittaa HTIT_FLAG_NOREGISTER-argumentteja käsin tarpeen mukaan.
- Lisättiin valinnaisen LRU-hakulaitteen välimuisti GetHostByName () -toimintoon, jotta se voi palata nopeammin, kun samat isäntänimet ratkaistaan yhä uudestaan.
- Lisätty SetHostNameCacheSettings () -toiminto, joka mahdollistaa ja säätää LRU-hakulausekkeitä GetHostByName (): ssä.
- Lisätty tuki "dnscache" ja "dnscachesize" komentorivin argumentteja HandleStandardDaemonArgs () -kohdassa, jotta LRU-haun välimuistin käyttäytymisen komentorivin määrittely sallisi.
- Modifioi Hashtable-luokka niin, että _iterHead, _iterTail ja _freeHead jäsenarvot ovat nyt uint32s pikemminkin ohjeita kuin muistia.
- Poista ThreadLocalStorage :: SetFreeHeldObjectsOnExit () menetelmä ja lisäsi sen sijaan boolean argumentin sen rakentajalle, koska pthreads ei salli tämän asetuksen muuttamista sen jälkeen, kun pthread_key_create () on kutsuttu.
- Siirsi GetCurrentThreadID () muscle_thread_id-luokkiin staattisena jäsenfunktioksi ja muutti sen palauttamaan muscle_thread_id-objektin ennemmin kuin allekirjoittamatonta.
- Muutti oletusnimi-nimi istuntoihin ilman tunnettua IP-osoitetta & quot; & quot; entiseen merkkijonoon kulmapidikkeillä on erityinen merkitys 5.84: n julkaisusta ja jotka voivat häiritä solmupolun sovittamista tahattomilla tavoilla.
- Message.cpp: in CalculateChecksum () -menetelmiä on muutettu siten, että ne havaitsevat tiedonsiirtoeroja.
- Poistettiin MUSCLE_USE_QT_FOR_ATOMIC_OPERATIONS-tuki AtomicCounter.h: sta, koska Qt: n QAtomicInt-luokka ei tue AtomicIncrement () -menetelmän uuden paluurajan tarvetta.
- Poistettu MessageIOGateway :: FlattenMessage () ja MessageIOGateway :: UnflattenMessage (). Lisätään heidän paikkansa: MessageIOGateway :: FlattenHeaderAndMessage () ja MessageIOGateway :: UnflattenHeaderAndMessage (). Nämä uudet menetelmät käsittelevät sekä otsikkotavuja että viestirunkoa samanaikaisesti.
- Lisättiin udpproxy.vcproj-tiedosto testikansioon, jotta autolla voidaan korvata udpproxy Windowsissa.
- Viesti: Flatten () toistaa nyt viestin kentät kerran kahdesti.
- GetCurrentThreadID () on nyt sisäinen toiminto, koska HashtableIterator voi nyt kutsua sen.
- Modifioi Deadlock-koodia käyttämään jonot Hashtables-tilien sijaan, koska muscle_thread_id-tunnusta ei voida enää käyttää Hashtable-avaintyypinä.
- Fixed testudp.cpp käyttämään MessageIOGatewayä asianmukaisesti sen UDP-viestintään.
- Tweaked ifdefs tiedostossa FilePathInfo.cpp hieman enemmän, jotta statInfo.st_birthtimespec ei pääse käyttämään MacOS / X SDK-tiedostoja, jotka eivät tarjoa sitä.
- MessageDataIOGateway ei enää yrittää purkaa viestiä zlib-deflatoidusta tietopuskurista, jota se ei voinut täyttää uudestaan.
- Fixed bug SendDataUDP (): ssä, joka saattaisi aiheuttaa SendDataUDP () virheen palauttamaan virheen, kun se lähetti monilähetysosoitteen ei-salpaamistilaa käyttäen ja tulostuspuskuri oli täynnä.
- Lisätty LogTime (MUSCLE_LOG_DEBUG) -puhelut kaikkiin MessageIOGateway :: DoInputImplementation () ja Message :: Unflatten () -virheiden polkuihin, jolloin on helpompi määrittää, milloin TCP-yhteydet keskeytetään tietojen vuoksi korruptio.
- Lisätty PreviousOperationHadTransientFailure () -toiminto, joka palauttaa true iff errno on EINTR tai ENOBUFS.
- Spamspersecond = -1 määrittämällä nyt hexterm lähettää roskapostitiedot mahdollisimman nopeasti.
- SocketMultiplexer.h: n MUSCLE_USE_POLL-toteutus toimitti POLLERR: n WSAPoll (): lle, mutta WSAPoll () ei tue POLLERR: tä joten WSAPoll () palaisi virheen, kun tämä tapahtui. Suoritettiin ongelma suodattamalla POLLERR, kun se koottiin Windowsissa.
- Korjattu bugi, jossa ENOBUFS: n palautus () saattaa aiheuttaa socket-yhteyden lopettamisen, vaikka ENOBUFS ei olekaan kohtalokas.
- SocketMultiplexer.cpp ei koota, kun määritettiin MUSCLE_USE_POLL. Kiinteä.
- ZLibCodec :: Deflate () -menetelmä ei pysty pakottamaan kaikkia tietoja hyvin suuressa puskurissa (esim. yli 42 MB). Kiinteä.
- StringMatcher-luokan numeerisen alueen syntaksi on laajennettu niin, että voit nyt määrittää useita alueita. Esimerkiksi & quot; & quot; "20", "21", "25", "30", "31", [...] ja "50". "
- Lisätty GetCurrentTime64ForRunTime64 () ja GetRunTime64ForCurrenTime64 () -konfigurointitoiminnot TimeUtilityFunctions.h: ään.
- Lisätty GetDescendant () -apuohjelma DataNode-luokkaan.
- Lisättiin C + + 11 siirto-konstruktorit ja siirtosiirtotoiminnot Hashtable, Queue, String, Message ja ByteBuffer luokkiin. Taaksepäin yhteensopivuutta vanhempien kääntäjien kanssa tämä koodi kootaan vain, jos kääntörivillä on määritetty -DMUSCLE_USE_CPLUSPLUS11.
- SharedMemory-luokka nerf itsessään ei-jaettuun muistiluokkaan, jos -DMUSCLE_FAKE_SHARED_MEMORY on määritetty.
- Lisättiin testfilepathinfo -testi testikansioon.
- Päivitettiin kaikki tekijänoikeusilmoituksen otsikot lukemaan 2000-2013 Meyer Sound.
- Lisätyt välilyönnit makrotunnusten (esim. UINT32_FORMAT_SPEC) ja merkkijonojen (esim. "Hei") välillä, jotta C ++ 11-kääntäjät onnistuisivat.
- ByteBuffer.cpp: llä oli syntaksivirhe, joka estäisi sen kokoamasta big-endian isäntiä. Kiinteä.
- Vain MacOS / X: korvataan vanhentuneet hiilitoiminto-puhelut Mach-ekvivalenttien avulla, jotta vältetään alle 10.8.x: n poistotarrat.
- Lisättiin InflateByteBuffer (): n ja DeflateByteBuffer () -version käytännölliset versiot
- Tietyt vanhentuneet / käyttämättömät menetelmät (EnsureBufferSize () ja FreeLargeBuffer ()) poistettiin AbstractMessageIOGateway-luokasta.
- Korjattu jonkinlainen kirjoitus delphi-alikansion kommentteihin.
- Hashtable-luokka ei enää synny varoituksia, kun se on koottu MSVC: hen, jossa määritetään -DMUSCLE_AVOID_MINIMIZED_HASHTABLES.
- Fixed bug IPAddressAndPort :: ToString (), joka aiheutti IPv4-osoitteen merkkijonojen muotoilun epäselvästi, kun (preferIPv4Style) asetettiin vääräksi.
Uutta strong> versiossa 6.01:
Uutta strong> versiossa 6.00:
Uutta strong> versiossa 5.92:
Uutta strong> versiossa 5.91:
Uutta strong> versiossa 5.90:
Uutta strong> versiossa 5.85:
Uutta strong> versiossa 5.84:
Uutta strong> ottakaa ByteBufferRef argumenttina.
Kommentteja ei löytynyt