MUSCLE은 다중 사용자 서버 클라이언트 링키지 환경 (Multi User Server Client Linkage Environment)의 약자이며 서버 및 클라이언트 구성 요소로 구성된 오픈 소스, 무료, 강력하고 확장 가능하며 플랫폼 간 메시징 시스템입니다. 멀티 플레이어 게임 및 IRC 채팅 클라이언트에서 SETI 계산 응용 프로그램에 이르기까지 모든 종류의 분산 형 소프트웨어를 작성하는 데 도움이됩니다.
기능 요약
MUSCLE을 사용하면 사용자는 자신의 세션 논리 또는 메시지 스트리밍 프로토콜을 정의하여 포함 된 "힘든 서버"를 쉽게 사용자 지정할 수 있습니다. 이 소프트웨어는 클라이언트 코드를 C ++, C, C #, Java, Delphi 또는 Python 프로그래밍 언어로 작성하는 데 도움을줍니다.
이 프로그램은 BMessage-like muscle :: Messages를 사용하여 TCP (Transmission Control Protocol) 스트림을 통해 컴퓨터간에 병합 된 메시지 전송을 지원하고, 근력 강화 된 서버를 배포합니다. 서버와 통신하는 데 사용할 수있는 클라이언트 프로그램을 작성할 수 있습니다.
또한 앞서 언급 한 모든 프로그래밍 언어를 지원하는 단일 및 다중 스레드 메시징 API가 포함되어 있습니다. & ldquo; 근사한 서버 & rdquo; 메시지 스트리밍 프로토콜 또는 세션 로직을 정의하여 쉽게 사용자 정의 할 수 있습니다.
MUSCLE 시작하기
로그인에 성공하면 클라이언트 프로그램은 중앙 서버에 누가 로그인했는지 파악할 수있을뿐 아니라 muscle :: messages를 RAM (시스템 메모리)에 저장하고 muscle :: Message를 연결된 다른 클라이언트에게 보냅니다 서버에. 클라이언트 프로그램은 서버의 특정 데이터를 구독 할 수 있으며 데이터가 변경되면 즉시 알림을받을 수 있습니다.
광범위한 메시지 라우팅 지원
이 소프트웨어는 지능적이고 계층 적 패턴 매칭 라우팅 메커니즘을 통해 유니 캐스트 스타일, 브로드 캐스트 스타일 및 멀티 캐스트 스타일의 다양한 메시지 라우팅을 지원하도록 설계되었습니다.
지원되는 OS 및 가용성
MUSCLE은 POSIX 호환 운영 체제에서 실행됩니다. 이 프로그램은 사용자가 GNU / Linux 시스템 용으로 응용 프로그램을 최적화 할 수있게 해주는 단일 범용 소스 아카이브로 배포됩니다. 현재 32 비트 및 64 비트 하드웨어 플랫폼이 모두 지원됩니다.
이 릴리스의 새로운 기능 :
tests / Makefile-mt는 testreflectsession이 지원하는 OS에서 실행될 때를 제외하고 더 이상 testreflectsession을 컴파일하지 않습니다.
"MUSCLE by Example"의 약간의 편집 및 재배정을 했습니까? 페이지.
MkDocs에있는 여러 개의 'tags'를 [URLs] (...)으로 대체했습니다.
CountedObject가있는 모든 클래스에서 PrivateObject 상속을 제거했습니다. 대신 CountedObject 전용 멤버 변수가 대신 포함됩니다. 이것은 모든 사적인 상속이 DOxygen 상속 그래프를 어지럽히 기 때문에 이루어졌습니다.
CountedObject.h에 DECLARE_COUNTED_OBJECT 매크로를 추가하여 개체 계산이 필요하지 않은 경우 CountedObjects의 잠재적 인 메모리 오버 헤드를 없앨 수 있습니다.
-DMUSCLE_AVOID_OBJECT_COUNTING에 대한 지원이 제거되고 대신 -DMUSCLE_ENABLE_OBJECT_COUNTING 매크로가 추가되었습니다. 즉, CountedObject 클래스는 현재 기본적으로 비활성화되어 있으므로이를 사용하려면 명시 적으로 활성화해야합니다.
"MUSCLE by Example"을 추가 함. MiscUtilityFunctions의 문서화. {cpp, h}
MUSCLE-by-Example MkDocs 소스의`tags '수를 [urls]로 변경하여 언급 된 메소드를 신속하게 검토 할 수있게했습니다.
server / Makefile은 이제 main () .o 파일 다음에 libmuscle.a를 지정합니다.
테스트 폴더에서 몇 가지 gcc 경고가 수정되었습니다 (미카의 제안에 따라).
UnparseFile ()은 공백이있는 키워드를 올바르게 인용하지 않았습니다. 결정된.
& quot; MUSCLE by Example & quot;의 종속성을 수정했습니다. 예제 'Makefile.
버전의 새로운 기능 :
Queue, Hashtable 및 String 클래스에 ShrinkToFit () 메소드를 추가했습니다. 이 메서드는 객체를 축소하여 내부적으로 할당 한 메모리 양이 실제로 보유하고있는 데이터 크기와 일치하도록합니다.
Hashtable :: EnsureSize () 및 Queue :: EnsureSize ()는 선택적 (allowShrink) 인수를 취합니다. true로 설정된 경우 객체가 내부적으로 할당 된 배열을 필요 이상으로 작게 재 할당 할 수 있습니다.
String 클래스의 버퍼 확장 동작을 약간 더 효율적으로 조정했습니다.
& quot; 메모리 부족 & quot;을 로깅하는 동안 발생할 수있는 잠재적 무한 재귀에 대한 경계를 추가했습니다. LogCallback이 메모리 할당을 시도한 경우 메모리 할당 실패 후 오류가 발생합니다.
버전 6.01의 새로운 기능 :
String 클래스에 PrependWord () 메소드를 추가했습니다.
String 클래스에 WithReplacements () 메소드를 추가했습니다.
DetectNetworkConfigChangesSession 클래스에 SetExplicitDelayMicros () 메서드를 추가했습니다.
IsCopperDetected () 메서드를 NetworkInterfaceInfo 클래스에 추가하여 이더넷 잭에 케이블을 꽂았는지 여부를 코드가 알 수 있도록합니다.
& quot; quietsend & quot; hexterm에 인수.
DetectNetworkConfigChangesSession 클래스의 NetworkInterfacesChanged () 가상 메서드는 특히 어떤 네트워크 인터페이스가 변경되었는지를 호출하는 인수를 사용하도록 변경되었습니다. 이 기능은 현재 Linux, MacOS / X 및 Windows에서만 구현됩니다. 다른 OS의 경우 인수는 항상 빈 목록입니다.
DetectNetworkConfigChangesSession의 Linux 구현에서 recvmsg ()가 오류를 반환하면 (예 : 신호 수신으로 인해) 세그먼트 화 오류를 일으킬 수있는 버그가 수정되었습니다.
버전 6.00의 새로운 기능 :
SSLSocketDataIO 클래스를 새로운 SSLSocketAdapterGateway 클래스와 함께 non-blocking I / O로보다 잘 동작하도록 수정했습니다.
ByteBuffer를 인수로 취하는 SSLSocketDataIO :: SetPrivateKey () 및 SSLSocketDataIO :: SetCertificate ()의 구현이 추가되었습니다.
게이트웨이에서 SSLSocketDataIO 클래스를 사용할 때 OpenSSL의 내부 상태 시스템을 관리하는 데 사용되는 SSLSocketAdapterGateway 클래스가 추가되었습니다.
ReflectServer 클래스에 SetSSLPrivateKey () 및 GetSSLPrivateKey () 메서드를 추가하여 들어오는 모든 TCP 연결에서 SSL 인증을보다 쉽게 사용할 수있게했습니다. 이러한 메서드는 MUSCLE_ENABLE_SSL이 정의 된 경우 사용할 수 있습니다.
ReflectServer 클래스에 SetSSLPublicKeyCertificate () 및 GetSSLPublicKeyCertificate () 메서드를 추가하여 나가는 TCP 연결에서 SSL 인증을보다 쉽게 사용할 수있게했습니다. 이러한 메서드는 MUSCLE_ENABLE_SSL이 정의 된 경우 사용할 수 있습니다.
스레드 된 I / O를 사용할 때 SSL 기능을보다 쉽게 사용할 수 있도록 SetSSLPrivateKey () 및 SetSSLPublicKeyCertificate () 메서드를 MessageTransceiverThread 클래스에 추가했습니다.
OpenSSL 공개 / 개인 키 쌍 생성에 대한 정보와 OpenSSL 테스트에 사용하기위한 예제 키 쌍을 포함하는 ssl_data 폴더가 추가되었습니다.
MUSCLE_ENABLE_SSL이 정의되면, portablereflectclient와 qt_example은 선택적 'publickey = filename'인수를 받아 들일 것입니다. 지정되면 SSL 모드가 활성화되고 이러한 클라이언트는 OpenSSL을 사용하여 강제로 연결되고이 파일을 자격 증명으로 제공합니다.
& quot; 애니메이션 & quot; qt_example 데모의 확인란을 선택하십시오. 이를 확인하면 창이 자동으로 표시기를 움직입니다. 이것은 재미 있고 여러 클라이언트가 동시에 트래픽을 생성하는 시나리오를 테스트하려는 경우에도 유용합니다.
qt_example 데모를 더 예쁘게 만들었습니다.
Hashtable.h 및 Queue.h에서 C ++ 11 도우미 매크로의 이름을 변경하여 다른 패키지의 매크로와 충돌 할 가능성을 줄였습니다. * SSLSocketDataIO 클래스의 사소한 오류가 수정되었습니다. o SSLSocketDataIO :: SetKey ()를 SetPrivateKey ()로 명칭 변경. o SSLSocketDataIO :: SetCertificate ()를 SetPublicKeyCertificate ()로 이름을 변경했습니다. o AbstractMessageIOGateway :: SetDataIO ()가 가상 메소드가되었습니다.
버전 5.92의 새로운 기능 :
Queue 및 Hashtable 클래스의 C ++ 11 이동 시멘틱스에 대한 향상된 지원 (-DMUSCLE_USE_CPLUSPLUS11이 정의 된 경우에만 사용 가능)
String 클래스에 인스트루멘테이션을 추가하여 String 객체가 복사, 이동 된 횟수를 볼 수 있습니다 (-DMUSCLE_COUNT_STRING_COPY_OPERATIONS가 정의 된 경우에만 사용 가능).
위에 수집 된 문자열 연산 데이터를 출력하는 PrintAndClearStringCopyCounts () 함수를 추가했습니다.
muscleSwap ()에 약간의 SFINAE 마법을 추가하여 가능하면 임시 객체에 복사하는 대신 SwapContents ()를 호출하여 스왑합니다.
이니셜 라이저 목록 생성자와 AddTailMulti ()의 오버로드를 Queue 클래스에 추가했습니다 (물론 -DMUSCLE_USE_CPLUSPLUS11이 정의 된 경우에만 사용 가능함)
새로운 C ++ 11 템플릿 구문 분석 지원과의 충돌을 피하기 위해 Queue :: AddTail ()을 AddTailMulti ()에 대기열 및 배열 오버런을 변경했습니다.
새 C ++ 11 템플릿 구문 분석 지원과의 충돌을 피하기 위해 Queue :: AddHead ()의 AddUheadMulti ()에 대기열 및 배열 오버런을 이름을 바꿉니다.
MCRASH_IMPL 매크로를 어설 션 (assert) 호출로 바 꾸었습니다 (거짓).
조금 더 안드로이드 호환성 tweakage.
tests 폴더의 많은 프로그램이 C ++ 11에서 컴파일되지 않았습니다. 결정된.
clang의 정적 분석 도구로 감지 된 몇 가지 잠재적 버그를 수정했습니다.
버전 5.91의 새로운 기능 :
EnsureCanPut () 메소드를 Hashtable 클래스에 추가했습니다.
큐 클래스에 EnsureCanAdd () 메소드를 추가했습니다.
DoMutexAtomicIncrement ()를 인라인 함수로 변경하여보다 효율적으로 호출 할 수있게했습니다.
qMessageTransceiverThread 및 QAcceptSocketsThread가 QApplication :: postEvent ()가 아닌 QCoreApplication :: postEvent ()를 호출하여 GUI가 아닌 Qt 앱을 허용하도록 변경했습니다.
MUSCLE의 개선 된 UDP 지원을 반영하기 위해 초보자 가이드 문서가 업데이트되었습니다.
Jean-FranAçois Mullet이 제공 한 일부 Android 호환성 변경 사항으로 병합되었습니다.
MUSCLE_USE_MUTEXES_FOR_ATOMIC_OPERATIONS 컴파일 플래그를 사용하면 작동 순서 문제로 인해 MUSCLE이 시작될 때 충돌이 발생합니다. 이 문제가 해결되었습니다.
MUSCLE_USE_MUTEXES_FOR_ATOMIC_OPERATIONS 컴파일 플래그는 이전에 AtomicCounter의 다른 구현을 사용할 수없는 경우에만 사용되었습니다. 이제 플래그의 우선 순위가 높아 지므로 플래그를 설정하면 다른 (보다 효율적인) 메커니즘을 사용할 수 있어도 Mutexes가 사용됨을 의미합니다.
버전 5.90의 새로운 기능 :
게이트웨이 코드가 UDP 스타일의 패킷 화 통신을보다 지능적으로 처리 할 수 있도록 DataIO 클래스에 GetPacketMaximumSize () 메소드를 추가했습니다.
MessageIOGateway는 이제 UDPSocketDataIO와 함께 유용합니다.
MessageArt에 GetArchiveMessageFromPool () 등의 복구 측 상대 역할을하기 위해 CreateObjectFromArchiveMessage () 템플릿 함수를 추가했습니다.
AtomicCounter :: AtomicIncrement ()는 이제 부울을 반환합니다 (새 카운터 값이 1이면 true).
HTIT_FLAG_NOREGISTER 플래그가 지정되지 않은 경우에도 읽기 전용 Hashtable 반복이 스레드로부터 안전하도록 HashtableIterator 클래스를 수정했습니다.
구현 중립적 방식으로 스레드 ID를 적절하게 표현하기 위해 SetupSystem.h에 muscle_thread_id 클래스를 추가했습니다.
& quot; 교착 상태 & quot; 프로그램을 테스트 폴더에 복사하십시오. 이 프로그램은 데드락 파인더 테스트를 실행 / 시연하는 방법으로 고의적으로 교착 상태가 발생할 위험이 있습니다.
필요한 경우 자동 스레드 안전성의 오버 헤드를 피하고 HTIT_FLAG_NOREGISTER 인수를 손으로 제공하겠다고 약속 한 사용자를 위해 -DMUSCLE_AVOID_THREAD_SAFE_HASHTABLE_ITERATORS 명령 줄 플래그에 대한 지원이 추가되었습니다.
GetHostByName ()에서 LRU 조회 캐시를 사용 가능하게하고 조정하는 SetHostNameCacheSettings () 함수를 추가했습니다.
& quot; dnscache & quot;에 대한 지원이 추가되었습니다. 및 "dnscachesize" HandleStandardDaemonArgs ()의 명령 줄 인수를 사용하여 LRU 조회 캐시의 동작을 명령 줄에서 지정할 수 있습니다.
메모리 사용을 줄이기 위해 _iterHead, _iterTail 및 _freeHead 멤버 값이 포인터가 아닌 uint32가되도록 Hashtable 클래스를 수정했습니다.
ThreadLocalStorage :: SetFreeHeldObjectsOnExit () 메소드를 제거하고, 대신에 pthread가 pthread_key_create ()가 호출 된 후에 그 설정을 변경할 수 없기 때문에 boolean 인수를 생성자에 추가했습니다.
GetCurrentThreadID ()를 static 멤버 함수로 muscle_thread_id 클래스로 옮긴 다음 unsigned long이 아닌 muscle_thread_id 객체를 반환하도록 변경했습니다.& quot; & quot;에서 알려진 IP 주소가없는 세션의 기본 호스트 이름을 변경했습니다. 이전 문자열의 꺾쇠 괄호가 5.84 릴리스에서 특별한 의미를 가지므로 의도하지 않은 방식으로 노드 경로 일치를 방해 할 수 있기 때문에 "_unknown_"으로 변경해야합니다.
Message.cpp의 CalculateChecksum () 메서드는 데이터 전치 차이를 감지 할 때보다 강력하도록 수정되었습니다.
Qt의 QAtomicInt 클래스가 AtomicIncrement () 메서드의 새 반환 값에 필요한 기능을 지원하지 않기 때문에 AtomicCounter.h에서 MUSCLE_USE_QT_FOR_ATOMIC_OPERATIONS 지원을 제거했습니다.
MessageIOGateway :: FlattenMessage () 및 MessageIOGateway :: UnflattenMessage ()가 제거되었습니다. 그들의 자리에 MessageIOGateway :: FlattenHeaderAndMessage ()와 MessageIOGateway :: UnflattenHeaderAndMessage ()가 추가되었습니다. 이 새로운 메소드는 헤더 바이트와 Message 본문을 동시에 처리합니다.
Windows에서 udpproxy 컴파일을 돕기 위해 udpproxy.vcproj 파일을 tests 폴더에 추가했습니다.
메시지 : Flatten ()은 Message의 필드를 두 번 반복하지 않고 한 번 반복합니다.
GetCurrentThreadID ()는 이제 HashtableIterator에 의해 자주 호출 될 수 있기 때문에 인라인 함수입니다.
muscle_thread_id를 더 이상 Hashtable 키 유형으로 사용할 수 없으므로 Hashtable 대신 Queue를 사용하도록 교착 상태 코드를 수정했습니다.
testudp.cpp가 UDP 통신을 위해 MessageIOGateway를 제대로 사용하도록 수정했습니다.
FilePathInfo.cpp의 ifdef를 조금 더 조정하여 statInfo.st_birthtimespec을 제공하지 않는 MacOS / X SDK를 사용할 때 statInfo.st_birthtimespec에 액세스하지 않도록하십시오.
MessageDataIOGateway는 더 이상 zlib이 축약되지 않은 데이터 버퍼에서 다시 팽창 할 수없는 메시지의 평평한 제거를 시도하지 않습니다.
논 블로킹 모드를 사용하여 멀티 캐스트 주소로 보낼 때 SendDataUDP ()가 오류를 잘못 반환 할 수 있고 출력 버퍼가 가득 찬 버그를 수정했습니다.
버전 5.85의 새로운 기능 :
MessageIOGateway :: DoInputImplementation () 및 Message :: Unflatten ()의 모든 오류 경로에 LogTime (MUSCLE_LOG_DEBUG) 호출을 추가하여 데이터 손상으로 인해 TCP 연결이 중지되는시기를 결정하기 쉽습니다.
errno가 EINTR 또는 ENOBUFS이면 true를 반환하는 PreviousOperationHadTransientFailure () 함수를 추가했습니다.
spamspersecond = -1을 지정하면 hexterm이 가능한 빨리 스팸 데이터를 보내 게됩니다.
SocketMultiplexer.h의 MUSCLE_USE_POLL 구현은 WSAPoll ()에 POLLERR을 제공하지만 WSAPoll ()은 POLLERR을 지원하지 않으므로 WSAPoll ()은이 오류가 발생하면 오류를 반환합니다. Windows에서 컴파일 할 때 POLLERR을 필터링하여 문제를 해결했습니다.
ENOBUFS가 치명적인 조건이 아니더라도 send ()가 ENOBUFS를 반환하면 소켓 연결이 종료 될 수있는 버그가 수정되었습니다.
MUSCLE_USE_POLL이 정의되면 SocketMultiplexer.cpp가 컴파일되지 않습니다. 결정된.
ZLibCodec :: Deflate () 메소드는 매우 큰 버퍼 (예 : 42MB 이상)의 모든 데이터를 압축하지 못합니다. 결정된.
버전 5.84의 새로운 기능 :
이제 StringMatcher 클래스의 숫자 범위 구문이 확장되어 여러 범위를 지정할 수 있습니다. 예를 들어 & quot; & quot; 19 ","20 ","21 ","25 ","30 ","31 ", [...] 및"50 "과 일치 할 것이다.
GetCurrentTime64ForRunTime64 () 및 GetRunTime64ForCurrenTime64 () 변환 함수를 TimeUtilityFunctions.h에 추가했습니다.
GetDescendant () 유틸리티 메서드를 DataNode 클래스에 추가했습니다.
Hashtable, Queue, String, Message 및 ByteBuffer 클래스에 C ++ 11 이동 생성자 및 이동 할당 연산자가 추가되었습니다. 이전 컴파일러와의 하위 호환성을 위해이 코드는 -DMUSCLE_USE_CPLUSPLUS11이 컴파일 라인에 지정된 경우에만 컴파일됩니다.
-DMUSCLE_FAKE_SHARED_MEMORY가 지정되면 SharedMemory 클래스가 비공유 메모리 클래스로 자동 이동합니다.
testsfilepathinfo 테스트를 tests 폴더에 추가했습니다.
모든 저작권 고지 헤더가 2000-2013 Meyer Sound로 업데이트되었습니다.
C ++ 11 컴파일러를 만족스럽게 만들기 위해 매크로 토큰 (예 : UINT32_FORMAT_SPEC)과 문자열 상수 (예 : "Hello") 사이에 공백을 추가했습니다.
ByteBuffer.cpp는 빅 엔디안 호스트에서 컴파일하지 못하도록하는 구문 오류가 있습니다. 결정된.
MacOS / X 만 해당 : 10.8.x에서 비추천 경고를 피하기 위해 폐기 된 Carbon 함수 호출을 Mach에 해당하는 것으로 대체했습니다.
버전 5.83의 새로운 기능은 다음과 같습니다.
ByteBufferRef를 인수로 사용하는 InflateByteBuffer () 및 DeflateByteBuffer ()의 편리한 버전이 추가되었습니다.
AbstractMessageIOGateway 클래스에서 쓸모 없거나 사용되지 않는 메소드 (EnsureBufferSize () 및 FreeLargeBuffer ())를 제거했습니다.
델파이 하위 폴더에있는 주석의 오타가 수정되었습니다.
Hashtable 클래스는 -DMUSCLE_AVOID_MINIMIZED_HASHTABLES가 정의 된 상태에서 MSVC에서 컴파일 될 때 더 이상 경고를 생성하지 않습니다.
IPAddressAndPort :: ToString ()에서 (preferIPv4Style)이 false로 설정되었을 때 IPv4 주소 문자열의 형식이 모호하게되는 버그가 수정되었습니다.
댓글을 찾을 수 없습니다