MUSCLE

软件截图:
MUSCLE
软件详细信息:
版本: 6.82 更新
上传日期: 22 Jun 18
许可: 免费
人气: 26

Rating: 5.0/5 (Total Votes: 1)

MUSCLE 代表多用户服务器客户端链接环境,它是一个开源,免费,强大,可扩展和跨平台的邮件系统,由服务器和客户端组件组成。它将帮助您编写各种分布式软件,从多人游戏和IRC聊天客户端到SETI计算应用程序。


功能一目了然

通过MUSCLE,用户可以通过定义自己的会话逻辑或消息流协议轻松自定义包含的“肌肉服务器”。该软件可帮助您使用C ++,C,C#,Java,Delphi或Python编程语言编写客户端代码。

该程序使用类似BMessage的肌肉::消息,支持发送扁平肌肉::通过TCP(传输控制协议)流在计算机之间发送消息,部署“肌肉发达的服务器”&rd​​quo;在服务器计算机上,允许您编写可用于与服务器通信的客户端程序。

此外,它还包括支持所有上述编程语言的单线程和多线程消息传递API。 “肌肉发达的服务器”&ndquo;可以通过定义消息流协议或会话逻辑轻松定制。

MUSCLE入门

成功登录后,客户端程序可以确定还有谁登录到中央服务器,以及将肌肉::消息存储在RAM(系统内存)中并将肌肉::消息发送到连接的其他客户端到服务器。请注意,客户端程序可以订阅服务器上的特定数据,并在数据更改时立即收到通知。


支持各种消息路由

该软件旨在通过智能的分层模式匹配路由机制支持各种消息路由,包括单播风格,广播风格和多播风格路由。


支持的操作系统和可用性

MUSCLE可在任何符合POSIX标准的操作系统上运行。它作为单个通用源存档分发,允许用户优化GNU / Linux系统的应用程序。目前支持32位和64位硬件平台。

此版本中的新功能

  • tests / Makefile-mt不再尝试编译testreflectsession,除非在testreflectsession支持的操作系统上执行。
  • 做了一些小的编辑和重新安排“按例子的肌肉”。页。
  • 用[URL](...)替换MkDocs中的多个`tags`
  • 从具有它的所有类中删除了CountedObject的私有继承 - 现在它们包含一个CountedObject私有成员变量。这样做只是因为所有私有继承都混淆了DOxygen继承图。
  • 在CountedObject.h中添加了一个DECLARE_COUNTED_OBJECT宏,以便在不需要对象计数的情况下,可以消除CountedObjects的任何潜在内存开销。
  • 删除了对-DMUSCLE_AVOID_OBJECT_COUNTING的支持,并在其位置添加了-DMUSCLE_ENABLE_OBJECT_COUNTING宏。 (也就是说,现在已禁用CountedObject类 - 默认情况下必须显式启用它才能使用它)。
  • 添加“按实例分类的肌肉” MiscUtilityFunctions的文档。{cpp,h}
  • 将MUSCLE-by-Example MkDocs源中的多个`tags`更改为[urls],以便快速查看他们提到的方法。
  • server / Makefile现在指定main().o文件后面的libmuscle.a。
  • 修复了测试文件夹中的一些gcc警告(根据Mika的建议)
  • UnparseFile()没有正确引用带空格的关键字。固定的。
  • 修复了“MUSCLE by Example”中的依赖关系。示例'Makefiles。

版本中的新内容

  • 为Queue,Hashtable添加了一个ShrinkToFit()方便方法,和String类。此方法缩小对象,以便内部分配的内存量与实际保存的数据大小相匹配。
  • Hashtable :: EnsureSize()和Queue :: EnsureSize()现在采用可选(allowShrink)参数,如果设置为true,则允许对象的内部分配数组在大于必要时重新分配。
  • 调整String类的缓冲区扩展行为以提高效率。
  • 添加了防止在记录“OUT OF MEMORY”时可能发生的潜在无限递归的警告。内存分配失败后出现错误,如果LogCallback尝试分配内存。

版本6.01中的新功能

  • 为String类添加了一个PrependWord()方便方法。
  • 为String类添加了WithReplacements()便捷方法。
  • 为DetectNetworkConfigChangesSession类添加了SetExplicitDelayMicros()方法。
  • 在NetworkInterfaceInfo类中添加了一个IsCopperDetected()方法,以便代码可以判断以太网插孔是否插有电缆。
  • 添加了“quietsend”对hexterm的争论。
  • DetectNetworkConfigChangesSession类中的NetworkInterfacesChanged()虚方法已更改为接受一个参数,该参数调出特定的网络接口已更改。此功能目前仅在Linux,MacOS / X和Windows下实现。对于其他操作系统,参数将始终为空列表。
  • 修复了DetectNetworkConfigChangesSession的Linux实现中的一个错误,如果recvmsg()返回错误(例如由于收到信号),可能会导致分段错误。

版本6.00中的新功能

  • 重写了SSLSocketDataIO类,以便更好地使用非阻塞I / O(与新的SSLSocketAdapterGateway类结合使用)。
  • 添加了以ByteBuffer作为参数的SSLSocketDataIO :: SetPrivateKey()和SSLSocketDataIO :: SetCertificate()的实现。
  • 添加了一个SSLSocketAdapterGateway类,用于在网关中使用SSLSocketDataIO类时管理OpenSSL的内部状态机。
  • 为ReflectServer类添加了SetSSLPrivateKey()和GetSSLPrivateKey()方法,以便在所有传入的TCP连接上更轻松地启用SSL身份验证。如果定义了MUSCLE_ENABLE_SSL,则可以使用这些方法。
  • 为ReflectServer类添加了SetSSLPublicKeyCertificate()和GetSSLPublicKeyCertificate()方法,以便更轻松地在传出TCP连接上启用SSL身份验证。如果定义了MUSCLE_ENABLE_SSL,则可以使用这些方法。
  • 将SetSSLPrivateKey()和SetSSLPublicKeyCertificate()方法添加到MessageTransceiverThread类,以便在使用线程I / O时更轻松地启用SSL功能。
  • 添加了一个ssl_data文件夹,其中包含有关生成OpenSSL公钥/私钥对的一些信息,以及用于测试OpenSSL的示例密钥对。
  • 当定义了MUSCLE_ENABLE_SSL时,肌肉现在接受一个可选的'privatekey = filename'参数。指定后,将启用SSL模式,肌肉模式将仅接受提供与此私钥/证书匹配的公钥的传入TCP连接。
  • 当定义了MUSCLE_ENABLE_SSL时,portablereflectclient和qt_example现在将接受可选的'publickey = filename'参数。指定后,将启用SSL模式,这些客户端将使用OpenSSL连接到肌肉,并将此文件作为其凭据提供。
  • 添加了“Animate” qt_example演示的复选框。检查它会导致窗口自动移动其指示器。如果您想测试多个客户端同时生成流量的方案,这很有趣也很有用。
  • 让qt_example演示更漂亮。
  • 在Hashtable.h和Queue.h中重命名了C ++ 11-helper宏,使它们不太可能与其他包的宏发生冲突。 *修复了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时才可用)
  • 将Queue :: AddTail()的队列和数组重载重命名为AddTailMulti(),以避免与新的C ++ 11模板解析支持冲突。
  • 将Queue :: AddHead()的Queue和数组重载重命名为AddHeadMulti(),以避免与新的C ++ 11模板解析支持冲突。
  • 通过调用assert(false)替换MCRASH_IMPL宏。
  • 更多Android兼容性调整。
  • tests文件夹中的许多程序都没有在C ++ 11下编译。固定的。
  • 修复了clang静态分析工具检测到的几个潜在错误。

版本5.91中的新功能

  • 为Hashtable类添加了EnsureCanPut()便捷方法。
  • 为Queue类添加了EnsureCanAdd()便捷方法。
  • 将DoMutexAtomicIncrement()更改为内联函数,以使其更有效。
  • 更改了QMessageTransceiverThread和QAcceptSocketsThread以调用QCoreApplication :: postEvent()而不是QApplication :: postEvent(),以允许非GUI Qt应用程序。
  • 更新了初学者指南文档,以反映MUSCLE改进的UDP支持。
  • 合并了Jean-FranA§oisMullet提供的一些Android兼容性更改。
  • 由于操作顺序问题,使用MUSCLE_USE_MUTEXES_FOR_ATOMIC_OPERATIONS编译标志会导致MUSCLE在启动时崩溃。现在已经解决了这个问题。
  • 以前只有在没有其他AtomicCounter实现可用时才使用MUSCLE_USE_MUTEXES_FOR_ATOMIC_OPERATIONS编译标志。现在该标志具有更高的优先级,因此设置该标志意味着将使用互斥锁,即使有另一种(更有效的)机制可用。

版本5.90中的新功能

  • 向DataIO类添加了一个GetPacketMaximumSize()方法,以允许网关代码更智能地处理UDP样式的分组通信。
  • MessageIOGateway现在可以与UDPSocketDataIO结合使用。
  • 为Message.h添加了CreateObjectFromArchiveMessage()模板化函数,作为GetArchiveMessageFromPool()等的恢复端对应物。
  • AtomicCounter :: AtomicIncrement()现在返回一个布尔值(如果新计数器值等于1,则为true)。
  • 修改了HashtableIterator类,以便即使没有指定HTIT_FLAG_NOREGISTER标志,只读Hashtable迭代现在也是线程安全的。
  • 在SetupSystem.h中添加了一个muscle_thread_id类,以实现中立的方式正确表示线程ID。
  • 添加了“死锁”程序到tests文件夹。该程序故意冒着造成僵局的风险,作为锻炼/展示死锁定试验的一种方式。
  • 添加了对-DMUSCLE_AVOID_THREAD_SAFE_HASHTABLE_ITERATORS命令行标志的支持,适用于那些宁愿避免自动线程安全开销并承诺在必要时手动提供HTIT_FLAG_NOREGISTER参数的人。
  • 为GetHostByName()函数添加了一个可选的LRU查找缓存,以便在反复解析相同的主机名时它可以更快地返回。
  • 添加了一个SetHostNameCacheSettings()函数,用于在GetHostByName()中启用和调整LRU查找缓存。
  • 添加了对“dnscache”的支持和“dnscachesize” HandleStandardDaemonArgs()中的命令行参数,以允许命令行指定LRU查找缓存的行为。
  • 修改了Hashtable类,以便_iterHead,_iterTail和_freeHead成员值现在是uint32s而不是指针,以减少内存使用量。
  • 删除了ThreadLocalStorage :: SetFreeHeldObjectsOnExit()方法,并在其构造函数中添加了一个布尔参数,因为pthreads不允许在调用pthread_key_create()之后更改该设置。
  • 将GetCurrentThreadID()作为静态成员函数移动到muscle_thread_id类中,并将其更改为返回一个muscle_thread_id对象而不是unsigned long。
  • 更改了“"”中没有已知IP地址的会话的默认主机名。到“_unknown_”,因为前一个字符串中的尖括号在5.84版本中具有特殊含义,并且可能以非预期的方式干扰节点路径匹配。
  • Message.cpp中的CalculateChecksum()方法已被修改为在检测数据转置差异方面更加健壮。
  • 从AtomicCounter.h中删除了MUSCLE_USE_QT_FOR_ATOMIC_OPERATIONS支持,因为Qt的QAtomicInt类不支持AtomicIncrement()方法的新返回值所需的功能。
  • 删除了MessageIOGateway :: FlattenMessage()和MessageIOGateway :: UnflattenMessage()。在他们的位置添加:MessageIOGateway :: FlattenHeaderAndMessage()和MessageIOGateway :: UnflattenHeaderAndMessage()。这些新方法同时处理头字节和消息体。
  • 在tests文件夹中添加了一个udpproxy.vcproj文件,以帮助在Windows下编译udpproxy。
  • 消息:Flatten()现在迭代消息中的字段一次,而不是两次。
  • GetCurrentThreadID()现在是一个内联函数,因为它现在可能经常被HashtableIterator调用。
  • 修改deadlockfinder代码以使用Queues而不是Hashtables,因为muscle_thread_id不能再用作Hashtable键类型。
  • 修复了testudp.cpp以正确使用MessageIOGateway进行UDP通信。
  • 稍微调整FilePathInfo.cpp中的ifdef,以便在使用不提供它的MacOS / X SDK时不会访问statInfo.st_birthtimespec。
  • MessageDataIOGateway不再尝试从无法重新充气的zlib-deflated数据缓冲区中取消消息。
  • 修复了SendDataUDP()中的一个错误,该错误可能导致SendDataUDP()在使用非阻塞模式发送到多播地址时错误地返回错误,并且输出缓冲区已满。

版本5.85中的新功能

  • 对MessageIOGateway :: DoInputImplementation()和Message :: Unflatten()中的所有错误路径添加了LogTime(MUSCLE_LOG_DEBUG)调用,以便更容易确定TCP连接何时因数据而中止损坏。
  • 添加了PreviousOperationHadTransientFailure()函数,该函数返回true iff errno是EINTR或ENOBUFS。
  • 指定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类的数值范围语法已扩展,现在您可以指定多个范围。例如,“”将匹配字符串“19”,“20”,“21”,“25”,“30”,“31”,[...]和“50”。
  • 将GetCurrentTime64ForRunTime64()和GetRunTime64ForCurrenTime64()转换函数添加到TimeUtilityFunctions.h。
  • 向DataNode类添加了GetDescendant()实用程序方法。
  • 将C ++ 11 move-constructors和move-assignment-operators添加到Hashtable,Queue,String,Message和ByteBuffer类中。为了向后兼容旧编译器,只有在编译行中指定了-DMUSCLE_USE_CPLUSPLUS11时才会编译此代码。
  • 如果指定了-DMUSCLE_FAKE_SHARED_MEMORY,则SharedMemory类现在将自身绑定到非共享内存类中。
  • 在tests文件夹中添加了testfilepathinfo测试。
  • 更新了所有版权声明标题,以阅读2000-2013 Meyer Sound。
  • 在宏令牌(例如UINT32_FORMAT_SPEC)和字符串常量(例如“Hello”)之间添加了空格,以使C ++ 11编译器满意。
  • ByteBuffer.cpp的语法错误会阻止它在big-endian主机上进行编译。固定的。
  • 仅适用于MacOS / X:使用Mach等效替换已弃用的Carbon函数调用,以避免10.8.x下的弃用警告。

版本5.83中的新功能

  • 添加了InflateByteBuffer()和DeflateByteBuffer()的便利版本将ByteBufferRef作为参数。
  • 从AbstractMessageIOGateway类中删除了一些过时/未使用的方法(EnsureBufferSize()和FreeLargeBuffer())。
  • 修正了delphi子文件夹中注释中的一些拼写错误。
  • 在MSVC下编译并且定义了-DMUSCLE_AVOID_MINIMIZED_HASHTABLES时,Hashtable类不再生成警告。
  • 修正了IPAddressAndPort :: ToString()中的一个错误,当(preferIPv4Style)设置为false时,导致IPv4地址字符串被格式化。

类似的软件

DB2
DB2

19 Feb 15

Redis
Redis

28 Sep 15

deltasql
deltasql

19 Feb 15

显影剂的其他软件 Jeremy Friesner

AudioMove
AudioMove

2 Jun 15

意见 MUSCLE

评论没有发现
添加评论
打开图片!