MUSCLE ย่อมาจาก Multi User Server Client Linkage Environment และเป็นระบบส่งข้อความแบบโอเพนซอร์สระบบฟรีที่มีประสิทธิภาพสามารถปรับขยายได้และข้ามแพลตฟอร์มซึ่งประกอบด้วยส่วนประกอบของเซิร์ฟเวอร์และไคลเอ็นต์ จะช่วยให้คุณสามารถเขียนซอฟต์แวร์แจกจ่ายได้ทุกรูปแบบจากเกมแบบมัลติเพลย์เยอร์และไคลเอ็นต์การสนทนาของ IRC ไปยังแอปคำนวณของ SETI
คุณสมบัติได้อย่างรวดเร็ว
ด้วย MUSCLE ผู้ใช้จะสามารถปรับแต่งเซิร์ฟเวอร์ "muscled" ที่มีอยู่ได้โดยง่ายด้วยการกำหนดโปรซีเจอร์เซสชันของตนเองหรือโปรโตคอลสตรีมมิงข้อความ ซอฟต์แวร์ช่วยให้คุณเขียนรหัสลูกค้าของคุณได้ในภาษาโปรแกรม C ++, C, C #, Java, Delphi หรือ Python
โปรแกรมจะใช้กล้ามเนื้อเหมือน BMessage :: Messages สนับสนุนการส่งกล้ามเนื้อที่แบน :: ข้อความระหว่างคอมพิวเตอร์ผ่านทาง TCP (Transmission Control Protocol) จะใช้เซิร์ฟเวอร์ & ldquo; muscled server & rdquo; บนเครื่องเซิร์ฟเวอร์ช่วยให้คุณเขียนโปรแกรมไคลเอ็นต์ที่สามารถใช้ในการสื่อสารกับเซิร์ฟเวอร์ได้
นอกจากนี้ยังมี API การส่งข้อความแบบข้อความเดียวและหลายเธรดที่สนับสนุนภาษาโปรแกรมทั้งหมดที่กล่าวมาข้างต้น เซิร์ฟเวอร์ & nbsp; muscled & rdquo; สามารถกำหนดค่าได้ง่ายโดยการกำหนดโปรโตคอลสตรีมมิ่งข้อความหรือตรรกะเซสชัน
เริ่มต้นใช้ MUSCLE
หลังจากการเข้าสู่ระบบที่ประสบความสำเร็จโปรแกรมไคลเอนต์สามารถกำหนดว่าใครที่ถูกล็อกอินเข้าสู่เซิร์ฟเวอร์ส่วนกลางเช่นเดียวกับการจัดเก็บกล้ามเนื้อ :: ข้อความใน RAM (หน่วยความจำของระบบ) และส่งกล้ามเนื้อ :: ข้อความไปยังไคลเอ็นต์อื่น ๆ ที่เชื่อมต่อ ไปยังเซิร์ฟเวอร์ โปรดทราบว่าโปรแกรมไคลเอ็นต์สามารถสมัครรับข้อมูลเฉพาะเจาะจงบนเซิร์ฟเวอร์และรับการแจ้งเตือนทันทีเมื่อมีการเปลี่ยนแปลงข้อมูล
รองรับการกำหนดเส้นทางข้อความได้หลากหลาย
ซอฟต์แวร์ได้รับการออกแบบมาเพื่อรองรับการกำหนดเส้นทางข้อความหลากหลายรูปแบบรวมทั้งรูปแบบที่มีรูปแบบเดียวแบบกระจายและแบบหลายผู้รับผ่านกลไกการกำหนดเส้นทางที่มีรูปแบบอัจฉริยะตามลำดับขั้น
OSes ที่สนับสนุนและความพร้อมใช้งาน
MUSCLE ทำงานบนระบบปฏิบัติการที่รองรับ POSIX ใด ๆ มีการแจกจ่ายเป็นที่เก็บข้อมูลสากลแบบเดียวที่ช่วยให้ผู้ใช้สามารถเพิ่มประสิทธิภาพแอพพลิเคชันสำหรับระบบ GNU / Linux ได้ แพลตฟอร์มฮาร์ดแวร์ทั้งแบบ 32 บิตและ 64 บิตได้รับการสนับสนุนในขณะนี้
มีอะไรใหม่ ในรุ่นนี้:
- test / Makefile-mt ไม่พยายามรวบรวม testreflects อีกต่อไปยกเว้นเมื่อรันบนระบบปฏิบัติการที่ testreflectsession สนับสนุน
- การแก้ไขเล็กน้อยและการจัดเรียง & quot; MUSCLE by Example & quot; หน้า.
- แทนที่ "แท็ก" จำนวนหนึ่งใน MkDocs ด้วย [URL] (... )
- ลบการสืบทอดมรดกของ CountedObject จากชั้นเรียนทั้งหมดที่มีอยู่แล้ว - ขณะนี้พวกเขารวมตัวแปรสมาชิก Privateed CountedObject แทน การทำเช่นนี้เกิดขึ้นได้ก็เพราะว่าสิ่งที่มรดกภาคเอกชนกำลังยุ่งอยู่กับกราฟการสืบทอด DOxygen
- เพิ่มมาโคร DECLARE_COUNTED_OBJECT เพื่อ CountedObject.h เพื่อลดความเป็นไปได้ที่อาจเกิดขึ้นกับหน่วยความจำของ CountedObjects ในกรณีที่ไม่ต้องการนับวัตถุ
- ลบการสนับสนุน --DMUSCLE_AVOID_OBJECT_COUNTING และเพิ่มมาโคร --DMUSCLE_ENABLE_OBJECT_COUNTING ในตำแหน่ง (นั่นคือคลาส CountedObject ถูกปิดใช้งานโดยค่าเริ่มต้นและต้องเปิดใช้งานอย่างชัดเจนเพื่อที่จะใช้)
- เพิ่มคำว่า "MUSCLE by Example" & quot; เอกสารสำหรับ MiscUtilityFunctions {cpp, h}
- เปลี่ยนแท็กในแท็ก `MkDocs MUSCLE-by-Example เป็น [urls] เพื่อให้สามารถอ่านวิธีการที่พวกเขากล่าวถึงได้อย่างรวดเร็ว
- เซิร์ฟเวอร์ / Makefile ตอนนี้ระบุ libmuscle.a หลังจากไฟล์ main () .o
- แก้ไขคำเตือน gcc บางอย่างในโฟลเดอร์ทดสอบ (ตามคำแนะนำของ Mika)
- UnparseFile () ไม่ได้ระบุคำหลักด้วยช่องว่างอย่างถูกต้อง คง.
- แก้ไขการอ้างอิงใน & quot; MUSCLE by Example & quot; ตัวอย่าง Makefiles
- เพิ่มเมธอด ShrinkToFit () ใน Queue, Hashtable, และชั้นสตริง วิธีนี้ทำให้วัตถุลดลงเพื่อให้จำนวนหน่วยความจำที่จัดสรรภายในตรงกับขนาดของข้อมูลที่ถืออยู่จริง
- Hashtable :: EnsureSize () และ Queue :: EnsureSize () ใช้อาร์กิวเมนต์ optional (allowShrink) เพื่อให้อาร์เรย์ที่ถูกจัดสรรภายในของอ็อบเจ็กต์ถูกจัดสรรใหม่หากมีขนาดใหญ่กว่าที่จำเป็น
- ปรับแต่งพฤติกรรมการขยายบัฟเฟอร์ของคลาสสตริงให้มีประสิทธิภาพมากขึ้น
- เพิ่มการป้องกันซ้ำกับการทับทิมอนันต์ที่อาจเกิดขึ้นขณะบันทึกข้อความ & quot; OUT OF MEMORY & quot; ข้อผิดพลาดหลังจากความล้มเหลวในการจัดสรรหน่วยความจำถ้า LogCallback พยายามจัดสรรหน่วยความจำ
- เพิ่มเมธอดความสะดวก PrependWord () ลงในคลาสสตริง
- เพิ่มเมธอดความสะดวกในการใช้ WithReplacements () ลงในคลาสสตริง
- เพิ่มเมธอด SetExplicitDelayMicros () ลงในคลาส DetectNetworkConfigChangesSession
- เพิ่มเมธอด IsCopperDetected () ลงในคลาส NetworkInterfaceInfo เพื่อให้รหัสสามารถระบุว่ามีช่องเสียบสายเคเบิลเชื่อมต่ออยู่หรือไม่
- เพิ่มคำว่า & quot; quietsend & quot; อาร์กิวเมนต์ที่ hexterm
- เมธอด VirtualInterfacesChanged () ในคลาส DetectNetworkConfigChangesSession ได้รับการเปลี่ยนแปลงเพื่อใช้อาร์กิวเมนต์ที่เรียกใช้ว่าอินเทอร์เฟซเครือข่ายใดที่มีการเปลี่ยนแปลง ฟังก์ชันนี้ใช้งานได้ภายใต้ Linux, MacOS / X และ Windows เท่านั้น สำหรับอาร์เรย์อื่น ๆ ของ OS จะเป็นรายการว่างเปล่า
- แก้ไขข้อผิดพลาดในการใช้งาน DetectNetworkConfigChangesSession ของลินุกซ์ซึ่งอาจทำให้เกิดข้อผิดพลาดในการแบ่งส่วนได้หาก recvmsg () ส่งคืนข้อผิดพลาด (เช่นเนื่องจากได้รับสัญญาณ)
- เขียนคลาส SSLSocketDataIO ใหม่ให้ทำงานได้ดีขึ้นโดยใช้ I / O ที่ไม่บล็อก (ร่วมกับคลาส SSLSocketAdapterGateway ใหม่)
- เพิ่มการใช้งาน SSLSocketDataIO :: SetPrivateKey () และ SSLSocketDataIO :: SetCertificate () ที่ใช้ ByteBuffer เป็นอาร์กิวเมนต์
- เพิ่มคลาส SSLSocketAdapterGateway ที่ใช้ในการจัดการเครื่องภายในของ OpenSSL เมื่อใช้คลาส SSLSocketDataIO กับเกตเวย์ของคุณ
- เพิ่มเมธอด SetSSLPrivateKey () และ GetSSLPrivateKey () ลงในคลาส ReflectServer เพื่อเปิดใช้งานการตรวจสอบสิทธิ์ SSL บนการเชื่อมต่อ TCP ที่เข้ามาได้ง่ายขึ้น มีการกำหนดวิธีการเหล่านี้ไว้และกำหนดไว้ MUSCLE_ENABLE_SSL
- เพิ่มเมธอด SetSSLPublicKeyCertificate () และ GetSSLPublicKeyCertificate () ลงในคลาส ReflectServer เพื่อเปิดใช้การตรวจสอบสิทธิ์ SSL บนการเชื่อมต่อ TCP แบบขาออกได้ง่ายขึ้น มีการกำหนดวิธีการเหล่านี้ไว้และกำหนดไว้ MUSCLE_ENABLE_SSL
- เพิ่มเมธอด SetSSLPrivateKey () และ SetSSLPublicKeyCertificate () ในคลาส MessageTransceiverThread เพื่อเปิดใช้งานฟังก์ชัน SSL อย่างรวดเร็วเมื่อใช้ I / O แบบเกลียว
- เพิ่มโฟลเดอร์ ssl_data พร้อมกับข้อมูลเกี่ยวกับการสร้างกุญแจสาธารณะ / คีย์สาธารณะของ OpenSSL และตัวอย่างคีย์พพ์สำหรับใช้ทดสอบ OpenSSL
- เมื่อกำหนด MUSCLE_ENABLE_SSL แล้ว muscled จะยอมรับอาร์กิวเมนต์ 'privatekey = filename' ที่ไม่บังคับ เมื่อระบุไว้โหมด SSL จะเปิดใช้งานและ muscled จะยอมรับเฉพาะการเชื่อมต่อ TCP ที่มาที่แสดงคีย์สาธารณะที่ตรงกับคีย์ส่วนตัว / ใบรับรองนี้เท่านั้น
- เมื่อกำหนด MUSCLE_ENABLE_SSL แล้ว portablereflectclient และ qt_example จะยอมรับอาร์กิวเมนต์ 'publickey = filename' ที่ไม่บังคับ เมื่อระบุไว้โหมด SSL จะเปิดใช้งานและไคลเอ็นต์เหล่านี้จะเชื่อมต่อกับ muscled โดยใช้ OpenSSL และแสดงไฟล์นี้เป็นข้อมูลรับรองของตน
- เพิ่ม & quot; ภาพเคลื่อนไหว & quot; เพื่อตรวจสอบ qt_example การตรวจสอบจะทำให้หน้าต่างเลื่อนตัวบ่งชี้ไปรอบ ๆ โดยอัตโนมัติ นี่เป็นเรื่องสนุกและมีประโยชน์หากคุณต้องการทดสอบภาพจำลองที่หลายเครื่องสร้างการเข้าชมพร้อมกัน
- ทำการทดสอบ qt_example prettier
- เปลี่ยนชื่อแมโคร C ++ 11-helper ใน Hashtable.h และ Queue.h เพื่อทำให้มีโอกาสน้อยที่จะชนกับแมโครของแพคเกจอื่น ๆ * แก้ไขข้อผิดพลาดเล็กน้อยในชั้น SSLSocketDataIO เปลี่ยนชื่อ SSLSocketDataIO :: SetKey () เป็น SetPrivateKey () o เปลี่ยนชื่อ SSLSocketDataIO :: SetCertificate () เป็น SetPublicKeyCertificate () o AbstractMessageIOGateway :: SetDataIO () เป็นเสมือนวิธีการ
- ปรับปรุงการสนับสนุน C + +11 เคลื่อนไหวความหมายในชั้นเรียนและ Hashtable (เปิดใช้งานเฉพาะเมื่อ -DMUSCLE_USE_CPLUSPLUS11 ถูกกำหนดไว้)
- เพิ่มเครื่องมือในชั้น String เพื่อที่ฉันจะได้ดูว่ามีการคัดลอกย้ายและอื่น ๆ กี่ครั้งที่วัตถุสตริง (เปิดใช้งานเฉพาะเมื่อมีการระบุ --DIUSCLE_COUNT_STRING_COPY_OPERATIONS)
- เพิ่มฟังก์ชัน PrintAndClearStringCopyCounts () ซึ่งจะพิมพ์ข้อมูลการดำเนินงานสตริงที่เก็บรวบรวมไว้ด้านบน
- เพิ่มเวทมนตร์ SFINAE ลงใน muscleSwap () เพื่อแลกกับ SwapContents () เมื่อเป็นไปได้แทนที่จะคัดลอกไปยังออบเจกต์ชั่วคราว
- เพิ่ม constructor ของ initializer-list และเกินพิกัดของ AddTailMulti () ไปยังชั้นเรียน Queue (ใช้ได้เฉพาะเมื่อมีการกำหนด --DMUSCLE_USE_CPLUSPLUS11)
- เปลี่ยนชื่อ Queue และ Overload อาเรย์ของ Queue :: AddTail () เป็น AddTailMulti () เพื่อหลีกเลี่ยงความขัดแย้งกับเทมเพลต C + + + ใหม่ในการแยกวิเคราะห์การสนับสนุน
- เปลี่ยนชื่อ Queue และ Array Overloads ของ Queue :: AddHead () เป็น AddHeadMulti () เพื่อหลีกเลี่ยงความขัดแย้งกับเทมเพลต C + + + ใหม่ในการแยกวิเคราะห์การสนับสนุน
- แทนที่มาโคร MCRASH_IMPL ด้วยการโทรเพื่อยืนยัน (เท็จ)
- ปรับแต่งความเข้ากันได้กับ Android ได้น้อยมาก
- หลายโปรแกรมในโฟลเดอร์ทดสอบไม่ได้รวบรวมภายใต้ C ++ 11 คง.
- แก้ไขข้อผิดพลาดที่อาจเกิดขึ้นหลายอย่างซึ่งตรวจพบโดยเครื่องมือวิเคราะห์แบบคงที่ของหวง
- เพิ่มวิธีการสะดวกสบายของ EnsureCanPut () ในคลาส Hashtable
- เพิ่มวิธีการสะดวกสบายของ EnsureCanAdd () ในชั้นเรียน Queue
- เปลี่ยน DoMutexAtomicIncrement () เป็นฟังก์ชันแบบอินไลน์เพื่อทำให้การเรียกใช้งานมีประสิทธิภาพมากขึ้น
- เปลี่ยน QMessageTransceiverThread และ QAcceptSocketsThread เพื่อเรียกใช้ QCoreApplication :: postEvent () แทนที่จะเป็น QApplication :: postEvent () เพื่ออนุญาตแอพพลิเคชันที่ไม่ใช่ GUI Qt
- อัปเดตเอกสารคำแนะนำสำหรับผู้เริ่มต้นใช้งานเพื่อให้สอดคล้องกับการสนับสนุน UDP ที่ปรับปรุงโดย MUSCLE
- ผสานรวมการเปลี่ยนแปลงความเข้ากันได้ของ Android ที่ Jean-FranA§ois Mullet จัดเตรียมไว้ให้แล้ว
- การใช้ค่าสถานะการคอมไพล์ MUSCLE_USE_MUTEXES_FOR_ATOMIC_OPERATIONS จะทำให้ MUSCLE เกิดข้อผิดพลาดเมื่อเริ่มต้นระบบเนื่องจากปัญหาเกี่ยวกับการสั่งการของการดำเนินงาน การดำเนินการนี้ได้รับการแก้ไขแล้ว
- ธงการรวบรวม MUSCLE_USE_MUTEXES_FOR_ATOMIC_OPERATIONS ถูกนำมาใช้ก่อนหน้านี้เท่านั้นหากไม่มีการติดตั้ง AtomicCounter อื่น ๆ ตอนนี้ธงมีลำดับความสำคัญสูงกว่าดังนั้นการตั้งค่าสถานะหมายความว่าจะใช้ Mutexes แม้ว่าจะมีกลไกอื่น ๆ (มีประสิทธิภาพมากกว่า)
- เพิ่มเมธอด GetPacketMaximumSize () ลงในคลาส DataIO เพื่อให้รหัสเกตเวย์สามารถจัดการการสื่อสารแบบ packetized ได้อย่างชาญฉลาดมากขึ้น
- MessageIOGateway ทำงานเป็นประโยชน์ร่วมกับ UDPSocketDataIO
- เพิ่มฟังก์ชัน Templated ของ CreateObjectFromArchiveMessage () ให้กับ Message.h เพื่อใช้เป็นคู่ฉบับด้านการกู้คืนเพื่อ GetArchiveMessageFromPool () ฯลฯ
- AtomicCounter :: AtomicIncrement () จะคืนค่าบูลีน (true และค่าตัวนับใหม่จะเท่ากับหนึ่งค่า)
- ปรับเปลี่ยนคลาส HashtableIterator เพื่อให้การกำหนดค่าแบบ Hashtable แบบอ่านอย่างเดียวสามารถอ่านได้ในขณะนี้แม้ว่าจะไม่ได้ระบุค่าสถานะ HTIT_FLAG_NOREGISTER ไว้
- เพิ่ม class muscle_thread_id ไปที่ SetupSystem.h เพื่อแสดงรหัสเธรดในรูปแบบที่ใช้งานได้อย่างถูกต้อง
- เพิ่มคำว่า & quot; การหยุดชะงัก & quot; โปรแกรมไปยังโฟลเดอร์ทดสอบ โปรแกรมนี้ตั้งใจสร้างความสับสนให้เป็นวิธีการออกกำลังกาย / สาธิตการทดสอบ deadlockfinder
- เพิ่มการสนับสนุนธงบรรทัดคำสั่ง -DMUSCLE_AVOID_THREAD_SAFE_HASHTABLE_ITERATORS สำหรับผู้ที่ต้องการหลีกเลี่ยงค่าใช้จ่ายด้านความปลอดภัยหัวข้อโดยอัตโนมัติและสัญญาว่าจะจัดหาอาร์กิวเมนต์ HTIT_FLAG_NOREGISTER ด้วยตนเองหากจำเป็น
- เพิ่มแคชการค้นหา LRU ที่เป็นตัวเลือกไปยังฟังก์ชัน GetHostByName () เพื่อให้สามารถส่งกลับได้เร็วขึ้นเมื่อมีการแก้ไขชื่อโฮสต์เดิมซ้ำไปซ้ำแล้วซ้ำอีก
- เพิ่มฟังก์ชัน SetHostNameCacheSettings () ที่เปิดใช้งานและปรับแคชการค้นหา LRU ใน GetHostByName ()
- เพิ่มการสนับสนุนสำหรับ & quot; dnscache & quot; และ & quot; dnscachesize & quot; อาร์กิวเมนต์บรรทัดคำสั่งใน HandleStandardDaemonArgs () เพื่อให้สามารถระบุลักษณะการทำงานของแคชของแคช LRU ของบรรทัดคำสั่งได้
- ปรับเปลี่ยนคลาส Hashtable เพื่อให้ค่าสมาชิก _iterHead, _iterTail และ _freeHead เป็น uint32 มากกว่าคำแนะนำเพื่อลดการใช้หน่วยความจำ
- ลบเมธอด ThreadLocalStorage :: SetFreeHeldObjectsOnExit () และเพิ่มอาร์กิวเมนต์ boolean ไปยังตัวสร้างแทนเนื่องจาก pthreads ไม่อนุญาตให้คุณเปลี่ยนการตั้งค่านั้นหลังจากเรียก pthread_key_create ()
- ย้าย GetCurrentThreadID () ลงในคลาส muscle_thread_id เป็นฟังก์ชันสมาชิกแบบคงที่และเปลี่ยนเป็น object แบบ muscle_thread_id แทน unsigned long
- เปลี่ยนชื่อโฮสต์ดีฟอลต์สำหรับเซสชันโดยไม่มีที่อยู่ IP ที่รู้จักจาก & quot; & quot; ไปที่ & quot; _unknown_ & quot; เนื่องจากวงเล็บมุมในสตริงเดิมมีความหมายพิเศษเป็นรุ่น 5.84 และอาจรบกวนการจับคู่โหนดกับเส้นทางที่ไม่ได้ตั้งใจ
- เมธอด CalculateChecksum () ใน Message.cpp ได้รับการแก้ไขให้มีประสิทธิภาพมากขึ้นในการตรวจจับความแตกต่างระหว่างการย้ายข้อมูล
- ลบการสนับสนุน MUSCLE_USE_QT_FOROMATICICOPERATIONS จาก AtomicCounter.h เนื่องจากคลาส QaTomicInt ของ Qt ไม่สนับสนุนฟังก์ชันที่จำเป็นต้องใช้ค่าส่งคืนใหม่ของเมธอด AtomicIncrement ()
- ลบ MessageIOGateway :: FlattenMessage () และ MessageIOGateway :: UnflattenMessage () เพิ่มในตำแหน่ง: MessageIOGateway :: FlattenHeaderAndMessage () และ MessageIOGateway :: UnflattenHeaderAndMessage () วิธีการใหม่เหล่านี้จัดการทั้งไบต์ส่วนหัวและเนื้อหาข้อความพร้อมกัน
- เพิ่มไฟล์ udpproxy.vcproj ลงในโฟลเดอร์ทดสอบเพื่อช่วยในการคอมไพล์ udpproxy ใน Windows
- ข้อความ: Flatten () จะทำซ้ำในฟิลด์ในข้อความเพียงครั้งเดียวแทนการใช้สองครั้ง
- GetCurrentThreadID () เป็นฟังก์ชันแบบอินไลน์แล้วเนื่องจาก HashtableIterator สามารถเรียกใช้งานได้บ่อยครั้ง
- ปรับเปลี่ยนรหัส deadlockfinder เพื่อใช้ Queues แทน Hashtables เนื่องจาก muscle_thread_id ไม่สามารถใช้เป็นคีย์ชนิด Hashtable ได้อีกต่อไป
- แก้ไข testudp.cpp เพื่อใช้ MessageIOGateway อย่างถูกต้องสำหรับการสื่อสาร UDP
- ปรับแต่ง ifdefs ใน FilePathInfo.cpp อีกเล็กน้อยเพื่อไม่ให้ statInfo.st_birthtimespec เข้าถึงเมื่อใช้ MacOS / X SDK ที่ไม่ได้ให้มา
- MessageDataIOGateway ไม่พยายามจะยกเลิกการล้างข้อมูลจากบัฟเฟอร์ zlib ที่คลาดเคลื่อนจนไม่สามารถขยายตัวอีกครั้งได้
- แก้ไขข้อผิดพลาดใน SendDataUDP () ที่อาจทำให้ SendDataUDP () ส่งข้อผิดพลาดอย่างไม่ถูกต้องเมื่อส่งไปยังที่อยู่ multicast โดยใช้โหมด non-blocking และบัฟเฟอร์ผลลัพธ์เต็ม
- เพิ่ม LogTime (MUSCLE_LOG_DEBUG) เรียกใช้เส้นทางข้อผิดพลาดทั้งหมดใน MessageIOGateway :: DoInputImplementation () และ Message :: Unflatten () เพื่อให้ง่ายต่อการตรวจสอบเมื่อมีการยกเลิกการเชื่อมต่อ TCP เนื่องจากข้อมูล การทุจริต.
- เพิ่มฟังก์ชัน PreviousOperationHadTransientFailure () ซึ่งจะส่งคืน errno ที่แท้จริงและ errno คือ EINTR หรือ ENOBUFS
- การระบุ spamspersecond = -1 จะทำให้ hexterm ส่งข้อมูลสแปมให้เร็วที่สุดเท่าที่จะเป็นไปได้
- การใช้งาน MUSCLE_USE_POLL ของ SocketMultiplexer.h กำลังส่ง POLLERR ไปยัง WSAPOL () แต่ WSAPOL () ไม่สนับสนุน POLLERR ดังนั้น WSAPOL () จะส่งคืนข้อผิดพลาดเมื่อเกิดเหตุการณ์นี้ขึ้น แก้ปัญหาโดยการกรอง POLLERR เมื่อคอมไพล์ภายใต้ Windows
- แก้ไขข้อผิดพลาดที่ส่ง () กลับ ENOBUFS อาจทำให้การเชื่อมต่อซ็อกเก็ตสิ้นสุดลงแม้ว่า ENOBUFS ไม่ใช่เงื่อนไขที่ร้ายแรง
- SocketMultiplexer.cpp จะไม่รวบรวมเมื่อกำหนด MUSCLE_USE_POLL คง.
- วิธี ZlibCodec :: Deflate () จะไม่สามารถบีบอัดข้อมูลทั้งหมดในบัฟเฟอร์ที่มีขนาดใหญ่มาก (เช่นมากกว่า 42MB) คง.
- ไวยากรณ์ช่วงตัวเลขของคลาส StringMatcher ได้รับการขยายเพื่อให้คุณสามารถระบุช่วงได้หลายช่วง ตัวอย่างเช่น & quot; & quot; จะตรงกับสตริง & quot; 19 & quot ;, & quot; 20 & quot; & quot; 21 & quot; & quot; 25 & quot; & quot; 30 & quot; & quot; 31 & quot;; &; & quot; & quot; & quot; & quot;
- เพิ่มฟังก์ชันการแปลง Conversion GetCurrentTime64ForRunTime64 () และ GetRunTime64ForCurrenTime64 () เป็น TimeUtilityFunctions.h
- เพิ่มเมท็อดสาธารณูปโภค GetDescendant () ลงในคลาส DataNode
- เพิ่มตัวย้าย C + +11 และตัวย้ายการกำหนดค่าไปยังคลาส Hashtable, Queue, String, Message และ ByteBuffer สำหรับความเข้ากันได้ย้อนหลังกับคอมไพเลอร์รุ่นเก่ารหัสนี้จะได้รับการคอมไพล์ถ้ามีการระบุ -DMUSCLE_USE_CPLUSPLUS11 ในบรรทัดการคอมไพล์แล้ว
- คลาส SharedMemory จะอยู่ในชั้นเรียนที่ไม่ใช่หน่วยความจำร่วมหากระบุ -DMUSCLE_FAKE_SHARED_MEMORY
- เพิ่มการทดสอบ testfilepathinfo ลงในโฟลเดอร์ทดสอบ
- อัปเดตหัวเรื่องของหัวเรื่องลิขสิทธิ์ทั้งหมดเพื่ออ่าน Meyer Sound 2000-2013
- เพิ่มช่องว่างระหว่างโทเค็นแมโคร (เช่น UINT32_FORMAT_SPEC) และค่าสตริง (เช่น & quot; Hello & quot;) เพื่อให้คอมไพเลอร์ C ++ 11 มีความสุข
- ByteBuffer.cpp มีข้อผิดพลาดทางไวยากรณ์ซึ่งอาจป้องกันไม่ให้คอมไพล์จากโฮสต์ขนาดใหญ่ของ endian คง.
- MacOS / X เท่านั้น: แทนที่ฟังก์ชัน Carbon ที่เลิกใช้แล้วโดยใช้พารามิเตอร์ Mach เพื่อหลีกเลี่ยงคำเตือนการเลิกใช้งานภายใต้ 10.8.x
- เพิ่มเวอร์ชันสะดวกสบายของ InflateByteBuffer () และ DeflateByteBuffer () ใช้ ByteBufferRef เป็นอาร์กิวเมนต์
- ลบวิธีที่ล้าสมัย / ไม่ได้ใช้ออก (EnsureBufferSize () และ FreeLargeBuffer ()) จากคลาส AbstractMessageIOGateway
- แก้ไขความผิดพลาดบางอย่างในความคิดเห็นในโฟลเดอร์ย่อย delphi
- คลาส Hashtable จะไม่สร้างคำเตือนเมื่อคอมไพล์ภายใต้ MSVC ด้วย -DMUSCLE_AVOID_MINIMIZED_HASHTABLES ที่กำหนดไว้
- แก้ไขข้อบกพร่องใน IPAddressAndPort :: ToString () ที่ทำให้สตริงที่อยู่ IPv4 ได้รับการจัดรูปแบบไม่ชัดเจนเมื่อ (preferIPv4Style) ถูกตั้งเป็น false
มีอะไรใหม่ ในเวอร์ชัน 6.01:
มีอะไรใหม่ ในเวอร์ชัน 6.00:
มีอะไรใหม่ ในเวอร์ชัน 5.92:
มีอะไรใหม่ ในเวอร์ชัน 5.91:
มีอะไรใหม่ ในเวอร์ชัน 5.90:
มีอะไรใหม่ ในเวอร์ชัน 5.85:
มีอะไรใหม่ ในเวอร์ชัน 5.84:
มีอะไรใหม่ ในเวอร์ชัน 5.83:
ความคิดเห็นที่ไม่พบ