# alibabacloud-nls-cpp-sdk **Repository Path**: opensource-release/alibabacloud-nls-cpp-sdk ## Basic Information - **Project Name**: alibabacloud-nls-cpp-sdk - **Description**: No description available - **Primary Language**: Unknown - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-04-03 - **Last Updated**: 2026-03-23 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 阿里智能语音交互 欢迎使用阿里智能语音交互(C++ SDK)。 C++ SDK 提供一句话识别、实时语音识别、语音合成等服务。可应用于客服、法院智能问答等多个场景。 此SDK包含以下能力: [大模型服务平台百炼语音交互 - 实时语音识别(Fun-ASR)](https://help.aliyun.com/zh/model-studio/fun-asr-real-time-speech-recognition-api-reference) [大模型服务平台百炼语音交互 - 实时语音识别(Paraformer)](https://help.aliyun.com/zh/model-studio/paraformer-real-time-speech-recognition-api-reference) [大模型服务平台百炼语音交互 - 实时语音合成(CosyVoice)](https://help.aliyun.com/zh/model-studio/cosyvoice-large-model-for-speech-synthesis) [智能语音交互 - 一句话识别](https://help.aliyun.com/zh/isi/developer-reference/sdk-for-c-4) [智能语音交互 - 实时语音识别](https://help.aliyun.com/zh/isi/developer-reference/sdk-for-c-5) [智能语音交互 - 录音文件识别闲时版](https://help.aliyun.com/zh/isi/developer-reference/sdk-reference) [智能语音交互 - 语音合成](https://help.aliyun.com/zh/isi/developer-reference/sdk-for-c-6) [智能语音交互 - 实时长文本语音合成](https://help.aliyun.com/zh/isi/developer-reference/sdk-for-c) [智能语音交互 - 流式文本语音合成](https://help.aliyun.com/zh/isi/developer-reference/c-sdk) [智能语音交互 - CosyVoice大模型长文本语音合成](https://help.aliyun.com/zh/isi/developer-reference/long-text-to-speech-synthesis-for-cosyvoice-c-sdk) [智能语音交互 - CosyVoice大模型流式文本语音合成](https://help.aliyun.com/zh/isi/developer-reference/c-sdk-3) [通义听悟 - 实时转写](https://help.aliyun.com/zh/model-studio/fun-asr-real-time-speech-recognition-api-reference) ## 前提条件 在使用 C++ SDK 前,确保您已经: ### 智能语音交互接入 * 注册了阿里云账号并获取您的Access Key ID 和 Secret。 * 开通智能语音交互服务 * 创建项目 * 获取访问令牌(Access Token) * Linux下请安装CMake 3.8及以上, GCC 4.8.5 或以上版本。目前验证且顺利编译运行的GCC版本有: 4.8.5、5.5.0、8.4.0 详细说明请参考:[智能语音交互接入](https://help.aliyun.com/document_detail/72138.html) ### 大模型服务平台百炼语音交互接入 * 注册了阿里云账号并开通阿里云百炼,获取您的API Key作为鉴权凭证。 * 配置API Key到环境变量 * Linux下请安装CMake 3.8及以上, GCC 4.8.5 或以上版本。目前验证且顺利编译运行的GCC版本有: 4.8.5、5.5.0、8.4.0 详细说明请参考:[大模型服务平台百炼语音交互接入](https://help.aliyun.com/zh/model-studio/get-api-key) ## 如何使用 C++ SDK 接入前请仔细阅读C++ SDK3.x.x文档:[智能语音交互](https://help.aliyun.com/product/30413.html) 特殊说明:版本C++SDK3.1.x及后续版本,相较于3.0,接口sendAudio和各接口返回值有改动,具体请看接口头文件中接口说明。 ### 接口调用流程演示 ![image](docs/images/processDemo.png) ### Linux平台编译及说明: 编译指令, 推荐开启支持C++11的版本, 即参数\为1: ./scripts/build_linux.sh \ \ \ \ > ./scripts/build_linux.sh 默认增量编译,生成Debug版本 > ./scripts/build_linux.sh all debug 全量编译,生成Debug版本 > ./scripts/build_linux.sh incr debug 增量编译,生成Debug版本 > ./scripts/build_linux.sh all release 全量编译,生成Release版本 > ./scripts/build_linux.sh incr release 增量编译,生成Release版本 > ./scripts/build_linux.sh all debug 1 全量编译,生成Debug版本,支持C++11 > ./scripts/build_linux.sh all debug 1 1 全量编译,生成Debug版本,支持C++11,支持私有云VipClient 生成物NlsSdk3.X_LINUX 目录说明: ```dir tree NlsSdk3.X_LINUX/ │── bin/ │ │── daDemo # 对话Demo binary文件 │ │── gtDemo # token生成Demo binary文件 │ │── ftDemo # 录音文件识别Demo binary文件 │ │── srDemo # 一句话识别Demo binary文件 │ │── stDemo # 实时识别Demo binary文件 │ │── fsDemo # 流式输入语音合成Demo binary文件 │ │── syDemo # 语音合成Demo binary文件 │ └── funAsrTranscriberDemo # 百炼Fun-ASR实时识别Demo binary文件 │── demo/ │ │── build_linux_demo.sh # 一键编译当前Demo │ │── generateTokenDemo.cpp # token生成Demo源码 │ │── dialogAssistantDemo.cpp # 对话Demo源码 │ │── speechRecognizerDemo.cpp # 一句话识别Demo源码 │ │── speechSynthesizerDemo.cpp # 语音合成Demo源码 │ │── flowingSynthesizerDemo.cpp # 流式输入语音合成Demo源码 │ │── speechTranscriberDemo.cpp # 实时识别Demo源码 │ │── fileTransferDemo.cpp # 录音文件转写Demo源码 │ │── generateAPIKeyDemo.cpp # 百炼生成临时API Key(token)Demo源码 │ │── cosyvoiceSynthesizerDemo.cpp # 百炼CosyVoice流式输入语音合成Demo源码 │ │── paraformerTranscriberDemo.cpp # 百炼Paraformer实时识别Demo源码 │ └── funAsrTranscriberDemo.cpp # 百炼Fun-ASR实时识别Demo源码 │ │── resource/ # 测试资源(测试音频文件) │ │ └── audio/ │ │ ├── test0.wav │ │ ├── test1.wav │ │ ├── test2.wav │ │ └── test3.wav │── include/ # 接口头文件 │ │── iNlsRequest.h │ │── nlsClient.h │ │── nlsEvent.h │ │── nlsGlobal.h │ │── nlsToken.h │ │── dialogAssistantRequest.h │ │── speechRecognizerRequest.h │ │── speechSynthesizerRequest.h │ │── flowingSynthesizerRequest.h │ │── speechTranscriberRequest.h │ │── dashCosyVoiceSynthesizerRequest.h │ │── dashParaformerTranscriberRequest.h │ └── dashFunAsrTranscriberRequest.h │── lib/ # 库(原libalibabacloud-idst-common.so已合并入libalibabacloud-idst-speech.so) │ │── libalibabacloud-idst-speech.a │ └── libalibabacloud-idst-speech.so │── README.md └── version # 版本说明 ``` 注意: 1. linux环境下,运行环境最低要求:CMake 3.8及以上,Glibc 2.5及以上,GCC4.8.5及以上。 2. linux环境下,编译环境无论是x86_64还是aarch64,编译脚本均为scripts/build_linux.sh。 3. linux环境下,高并发运行,注意 系统打开文件数限制,可通过ulimit -a查看当前允许的打开文件数限制。比如预设最大并发数1000,建议将open files限制设置大于1000,ulimit -n 2000。否则会出现connect failed错误。 4. 使用alibabacloud-nls-cpp-sdk<版本>-master.zip进行编译时,若出现如下CMake报错: > fatal: not a git repository    则请修改 CMakeLists.txt 中 ``` exec_program( "git" ${CMAKE_CURRENT_SOURCE_DIR} ARGS "log --format='[sha1]:%h [author]:%cn [time]:%ci [commit]:%s [branch]:%d' -1" OUTPUT_VARIABLE VERSION_SHA1 ) add_definitions(-DGIT_SHA1="\\"${VERSION_SHA1}\\"") ```    改成 ``` add_definitions(-DGIT_SHA1="\\"no\\"") ```    以去掉缺失git导致的CMake报错。 ### 嵌入式(eg. arm-linux等)平台编译及说明: > 请参考Linux的方法,自行修改工具链和CMake进行交叉编译... ### Android平台编译及说明: 支持arm64-v8a、armeabi-v7a、x86、x86_64 移动端推荐使用阿里云智能语音交互的移动端SDK 编译指令: > ./scripts/build_android.sh 默认增量编译,生成arm64-v8a架构Debug版本 > ./scripts/build_android.sh all debug arm64-v8a 全量编译,生成arm64-v8a架构Debug版本 > ./scripts/build_android.sh incr debug arm64-v8a 增量编译,生成arm64-v8a架构Debug版本 > ./scripts/build_android.sh all release arm64-v8a 全量编译,生成arm64-v8a架构Release版本 > ./scripts/build_android.sh incr release arm64-v8a 增量编译,生成arm64-v8a架构Release版本 ### Windows C++ 平台编译及说明: 由于Windows兼容问题,本SDK暂不支持Windows平台。 #### 一、简单使用(推荐) NlsCppSdk_Windows_<版本号>_.zip 为已经(使用MSVC 142)编译完成的库文件,建议直接拿库文件进行试用和集成。 #### 二、简单编译方式 此方式使用已经编译好的第三方库进行编译,但过程较长,容易出错而导致无法顺利得到最终成果物,建议还是用一方法。 1. 进入scripts目录,使用文本编辑工具分别打开build_windows_64_prebuild.bat和build_windows_64_package.bat,修改解压缩工具WinRAR。 例如,您的个人电脑WinRAR.exe所在路径为C:\Program Files (x86)\WinRAR\WinRAR.exe,则修改脚本文件中第三行为 set winRar="C:\Program Files (x86)\WinRAR\WinRAR.exe" 为您的个人电脑中WinRAR路径。 ![image](docs/images/cpp_64_prebuild.jpg) 2. 双击批处理脚本build_windows_64_prebuild.bat,从而解压SDK源码中包含的各第三方库,并把依赖头文件释放到合适位置。 3. 使用Visual Studio(VS2019及以上版本)打开nlsCppSdk.sln。 4. 直接编译需要的范例工程。 > 说明 > * 需要确认好各项目属性中的目标平台版本和平台工具集,按需选择。例如,您的目标平台版本为10.0.19041.0,平台工具集为Visual Studio 2019(v142)。 > * 目前支持Debug_x64,Release_x64,Debug_win32和Release_win32。本文档说明均以x64为例。 5. 右键单击speechTranscriberDemo项目(以实时语音识别Demo为例),单击生成进行编译。 ![image](docs/images/cppSdk01.png) 6. 编译Debug_x64和Release_x64。 > * Debug生成物路径:{ProjectRoot}\build\build_win64\nlsCppSdk\x64\Debug > * Release生成物路径:{ProjectRoot}\build\build_win64\nlsCppSdk\x64\Release 各路径包含所有生成的dll和测试exe文件。其中{ProjectRoot}为SDK源码路径。 7. 若需要对生成的库文件、测试exe文件、头文件、说明文档等对外披露的文件进行打包,则在scripts目录下双击运行build_windows_64_package.bat,生成{ProjectRoot}\build\install\NlsSdk3.X_win64.zip。其中{ProjectRoot}为SDK源码路径。 #### 三、自动化编译方式(不推荐) 此方法可能由于vs版本或windows平台差异问题,无法顺利运行。 > 运行 build_windows_64.bat ### Windows C# 平台编译及说明:  此C# SDK是对Windows C++ SDK的包装,所以并不具有跨平台的能力,仅可运行在Windows平台。 #### 一、简单使用(推荐) NlsCsharpSdk_Windows_<版本号>_.zip 为已经编译完成的库文件,建议直接拿库文件进行试用和集成。 #### 二、自动化编译方式 必须先完成Windows平台Cpp SDK编译,C#依赖Windows Cpp SDK的库和头文件。完成以上编译后开始进行C#编译。此过程较长,容易出错而导致无法顺利得到最终成果物,建议还是用一方法。 1. 使用Visual Studio(VS2019及以上版本)打开nlsCsharpSdk.sln,进行C#工程编译。 > 说明 > * 需要确认nlsCsharpSdkExtern的平台工具集和目标平台版本,以及nlsCsharpSdkDemo和nlsCsharpSdk的.NET版本。此处目标框架为 .NET Framework 4.7.2 2. 右键nlsCsharpSdkDemo项目,选择生成,生成所有生成物。 ![image](docs/images/csharpSdk01.png) > 说明 > * nlsCsharpSdk.dll为NLS C# SDK,可进行发布Nupkg。 > * nlsCsharpSdkExtern.dll为NLS C#与Cpp互操作层。 > * nlsCsharpSdkDemo.exe为NLS C# UI Demo。 4. 以Debug版本为例,运行还需要一些NLS Cpp SDK相关依赖库,需要将依赖库和测试音频文件搬移到nlsCsharpSdkDemo.exe能依赖的路径:{ProjectRoot}\nlsCsharpSdk\nlsCsharpSdkDemo\bin\Debug。即分别将下方动态库拷贝至 {ProjectRoot}\nlsCsharpSdk\nlsCsharpSdkDemo\bin\Debug目录下。 > 说明 > * 正常情况下在工程编译完成后系统会进行自动搬运,您可跳过此步骤。若目标路径无以下文件,则需要进行手动搬运。 > {ProjectRoot}\build\install\NlsSdk3.X_win64\lib\14.0\x64\Debug\nlsCppSdk.dll > {ProjectRoot}\build\install\NlsSdk3.X_win64\lib\14.0\x64\Debug\libcrypto-1_1-x64.dll > {ProjectRoot}\build\install\NlsSdk3.X_win64\lib\14.0\x64\Debug\libssl-1_1-x64.dll > {ProjectRoot}\build\install\NlsSdk3.X_win64\lib\14.0\x64\Debug\libcurld.dll (release版为libcurl.dll) > {ProjectRoot}\build\install\NlsSdk3.X_win64\lib\14.0\x64\Debug\libeay32.dll > {ProjectRoot}\build\install\NlsSdk3.X_win64\lib\14.0\x64\Debug\ssleay32.dll > {ProjectRoot}\build\install\NlsSdk3.X_win64\lib\14.0\x64\Debug\pthreadVC2.dll {ProjectRoot}\nlsCsharpSdk\nlsCsharpSdkDemo\bin\Debug\audio_files\ 目录下,需要包含命名为test0.wav、test1.wav、test2.wav、test3.wav的四个音频文件,用于进行语音识别。这些WAV文件可从resource/audio目录拷贝。若缺少这些文件,系统将会在运行语音识别过程中,因找不到文件而退出。 5. 双击nlsCsharpSdkDemo.exe,运行如下: ![image](docs/images/csharpSdk02.png) 6. (可选)单击<OpenLog>可开启日志记录。 7. 单击<InitNls> 初始化sdk。 8. 填入Appkey、AkId、AkSecret,然后单击<CreateToken>生成token,合法token会在Token栏显示。若已经有Token,则可直接填Appkey和Token,无需点击<CreateToken>。 9. 实时转写<CreateTranscriber>创建实时转写请求,点<Start>开始工作,会在最下方实时显示识别结果。<Stop><ReleaseTranscriber>进行停止、释放。 10. 语音合成<CreateSynthesizer>创建语音合成请求,点<Start>开始工作,会exe当前路径生成保存音频数据的taskId.pcm文件。<Cancel><ReleaseSynthesizer>进行停止、释放。 11. 一句话识别<CreateRecognizer>创建一句话识别请求,点<Start>开始工作,会在最下方显示识别结果。<Stop><ReleaseRecognizer>进行停止、释放。 12. 录音文件识别:填写录音文件的URL,点击<FileTransfer>开始工作, 会在最下方显示结果。此功能只需填写Appkey、AkId、AkSecret。 ## 并发性能说明 测试环境:十六核 Intel(R) Xeon(R) Platinum 8163 CPU @ 2.50GHz 以下测试数据仅做参考,在LogLevelInfo情况下测试,实际运行会根据设置参数、运行环境不同等因素有较大差异。 ### 智能语音交互(NLS)语音合成测试数据及说明 合成文本:“今日天气真不错,我想去操场踢足球。” 发音人:xiaoyun。 合成音频后103278字节,约3.2秒。 3.3.0a开始为了提升测试准确度,运行5分钟求平均每分钟的结果。 北京Client请求上海Server. #### 性能测试数据 | 版本 | 链接模式 | 并发数 | 启用事件池数 | 首包延迟 | 单轮时长 | CPU占用率 | 每分钟完成请求数 | 备注 | | :----: | :----: | :---: | :--------: | :-----: | :----: | :----------: | :-----------: | :---------------------: | | 3.1.14 | 短链接 | 100 | 1 | 489ms | 712ms | 100% / 1600% | 8784 | | | 3.1.16 | 短链接 | 100 | 1 | 677ms | 1903ms | 46% / 1600% | 3230 | | | 3.1.17 | 短链接 | 100 | 1 | 407ms | 634ms | 59% / 1600% | 9723 | | | 3.2.1a | 短链接 | 100 | 1 | 277ms | 388ms | 113% / 1600% | 15576 | | | 3.2.1b | 短链接 | 100 | 1 | 271ms | 374ms | 116% / 1600% | 15898 | Release / LogLevelDebug | | 3.2.1b | 短链接 | 100 | 1 | 262ms | 361ms | 85% / 1600% | 16501 | Release / LogLevelInfo | | 3.3.0a | 预链接 | 100 | 1 | 73ms | 300ms | 129% / 1600% | 18167 | Release / LogLevelInfo | | 3.1.14 | 短链接 | 100 | 4 | 341ms | 507ms | 266% / 1600% | 12357 | | | 3.1.16 | 短链接 | 100 | 4 | 570ms | 1833ms | 78% / 1600% | 3360 | | | 3.2.1b | 短链接 | 100 | 4 | 261ms | 360ms | 108% / 1600% | 16600 | Release / LogLevelInfo | | 3.3.0a | 预链接 | 100 | 4 | 54ms | 81ms | 311% / 1600% | 68793 | Release / LogLevelInfo | | 3.1.14 | 短链接 | 200 | 4 | 530ms | 924ms | 294% / 1600% | 13921 | | | 3.2.1a | 短链接 | 200 | 4 | 410ms | 757ms | 130% / 1600% | 10607 | | | 3.3.0a | 预链接 | 200 | 4 | ms | ms | % / 1600% | | | #### 首包延迟稳定性测试数据 合成文本为测试用例随机长句 发音人:xiaoyun。 北京Client请求上海Server. | 版本 | 链接模式 | 并发数 | 运行时长 | 完成请求数 | 首包延迟 | 首包延迟<=50ms | 首包延迟<=100ms | 首包延迟<=200ms | 首包延迟<=500ms | 首包延迟<=1000ms | 首包延迟<=1500ms | 首包延迟<=2000ms | 首包延迟>2000ms | 备注 | | :----: | :----: | :---: | :-----: | :------: | :-----: | :----------: | :------------: | :------------: | :-------------: | :-------------: | :------------: | :-------------: | :------------: | :---------------------: | | 3.2.1a | 短链接 | 20 | 120h | 618553 | 316ms | 0 | 0 | 0 | 616487(996.660‰)| 2045(3.306‰) | 16(0.026‰) | 4(0.006‰) | 1(0.0002‰) | Debug / LogLevelInfo | | 3.3.0a | 预链接 | 20 | 120h | 626921 | 116ms | 1372(2.188‰) |233593(372.604‰)|360763(575.452‰)| 30718(48.998‰) | 471(0.751‰) | 5(0.008‰) | 0 | 0 | Debug / LogLevelInfo | #### 说明 ##### 链接模式选择短链接还是长链接?  默认为短链接。高并发情况下,短链接模式每次请求都会申请联网完成后再释放,会有一定的系统负担,尤其是DNS负担。可改成长链接模式,维持链接状态进行请求,可一定程度降低CPU占用率和首包延迟。但是需要特别注意的是,长时间链接语音服务器而无动作,会被服务器断开,所以请谨慎使用长链接模式。 ##### 初始化时startWorkThread(事件池数)应该填多少?  单机并发低于100时,事件池数可为1。单机并发超过100,事件池数建议为4(1的话容易单核打满)。事件池数越大,单轮完成耗时越短,但是CPU整体占用率越高。可根据耗时和CPU占用率找个平衡。 ##### 单机最大并发可达多少?  目前单机并发极限测试记录为800,只要机器的网络性能和CPU占用率可承受,完成一轮的耗时可接收,可继续提高并发数。 ### 智能语音交互(NLS)流式文本语音合成测试数据及说明 合成文本:“现在是2025-02-13 10:47:05 839202。今日天气真不错,我想去操场踢足球。” 发音人:longxiaoxia_v2。 合成音频后约324800字节,约10.15秒。 3.3.0a开始为了提升测试准确度,运行5分钟求平均每分钟的结果。 北京Client请求北京Server. #### 性能测试数据 | 版本 | 链接模式 | 并发数 | 启用事件池数 | Started延迟 | 首包延迟 | 单轮时长 | CPU占用率 | 每分钟完成请求数 | 备注 | 发音人 | | :----: | :----: | :---: | :--------: | :--------: |:------: | :-----: | :------------: | :-----------: | :---------------------: | :-----------------: | | 3.2.1b | 短链接 | 20 | 1 | 93ms | 367ms | 3456ms | 5.1% / 1600% | 349 | Debug / LogLevelInfo | longxiaoxia_v2 | | 3.3.0a | 预链接 | 20 | 1 | 10ms | 426ms | 2123ms | 4.5% / 1600% | 568 | Debug / LogLevelInfo | longxiaoxia | | 3.3.0a | 预链接 | 20 | 1 | 10ms | 288ms | 3373ms | 3.2% / 1600% | 357 | Debug / LogLevelInfo | longxiaoxia_v2 | #### 首包延迟稳定性测试数据 合成文本为测试用例随机长句(现在开始进行流式语音合成测试2025-02-13 10:47:05 839202。+ 随机长句) 北京Client请求北京Server. | 版本 | 链接模式 | 并发数 | 运行时长 | 完成请求数 | 首包延迟 | 首包延迟<=50ms | 首包延迟<=100ms | 首包延迟<=200ms | 首包延迟<=500ms | 首包延迟<=1000ms | 首包延迟<=1500ms | 首包延迟<=2000ms | 首包延迟>2000ms | 备注 | 发音人 | | :----: | :----: | :---: | :-----: | :------: | :-----: | :----------: | :------------: | :------------: | :------------:| :------------: | :-------------: | :-------------: | :------------: | :---------------------: | :------------------: | | 3.2.1a | 短链接 | 5 | 12h | 11800 | 333ms | 0 | 0 | 0 |11744(995.254‰)| 64(5.424‰) | 0 | 0 | 0 | Debug / LogLevelInfo | longxiaoxia_v2 | | 3.3.0a | 预链接 | 5 | 12h | 11803 | 249ms | 0 | 0 | 0 |11802(999.915‰)| 8(0.678‰) | 0 | 0 | 0 | Debug / LogLevelInfo | longxiaoxia_v2 | ### 智能语音交互(NLS)语音识别测试数据及说明 识别音频:为提供的4个wav循环进行识别 #### 测试数据 | 版本 | 链接模式 | 并发数 | 启用事件池数 | 音频格式 | 音频时长 | 单轮时长 | start耗时 | sendAudio耗时 | CPU占用率 | | :----: | :----: | :---: | :--------: | :-----: | :----: | :-----: | :------: | :-----------: | :----------: | | 3.1.14 | 短链接 | 100 | 1 | PCM | 5287ms | 5904ms | 287ms | 65us | 20% / 1600% | | 3.1.17 | 短链接 | 100 | 1 | PCM | 5287ms | 5635ms | 249ms | 28us | 25% / 1600% | | 3.2.1a | 短链接 | 100 | 1 | PCM | 5287ms | 5838ms | 266ms | 22us | 22% / 1600% | | 3.1.14 | 短链接 | 200 | 1 | PCM | 5287ms | 6015ms | 297ms | 64us | 38% / 1600% | | 3.1.16 | 短链接 | 200 | 1 | PCM | 5287ms | 5867ms | 134ms | 127us | 68% / 1600% | | 3.2.1a | 短链接 | 200 | 1 | PCM | 5287ms | 5839ms | 260ms | 23us | 43% / 1600% | | 3.1.14 | 短链接 | 200 | 1 | OPUS | 5287ms | 7283ms | 307ms | 1108us | 758% / 1600% | | 3.1.16 | 短链接 | 200 | 1 | OPUS | 5287ms | 6507ms | 145ms | 607us | 467% / 1600% | | 3.1.14 | 短链接 | 200 | 4 | OPUS | 5287ms | 6264ms | 295ms | 1199us | 892% / 1600% | | 3.1.16 | 短链接 | 200 | 4 | OPUS | 5287ms | 6489ms | 147ms | 621us | 501% / 1600% | | 3.2.1a | 短链接 | 200 | 4 | OPUS | 5287ms | 5928ms | 272ms | 1249us | 992% / 1600% | | 3.1.14 | 短链接 | 400 | 1 | PCM | 5287ms | 6104ms | 327ms | 71us | 72% / 1600% | #### 说明 ##### 链接模式选择短链接还是长链接?  默认为短链接。高并发情况下,短链接模式每次请求都会申请联网完成后再释放,会有一定的系统负担,尤其是DNS负担。可改成长链接模式,维持链接状态进行请求,可一定程度降低CPU占用率和首包延迟。但是需要特别注意的是,长时间链接语音服务器而无动作,会被服务器断开,所以请谨慎使用长链接模式。 ##### 音频格式选PCM还是OPUS?  PCM数据为原始音频,体积较大,高并发情况下带宽压力较大,但CPU运算压力较低。OPUS为压缩音频,体积约为原始音频的八分之一左右,但是增加了音频压缩的步骤,极大增加了CPU占用率。单机并发数超过200建议使用PCM格式,否则强烈推荐OPUS。 ##### 初始化时startWorkThread(事件池数)应该填多少?  PCM格式情况下单机并发低于400时,事件池数可为1。PCM格式情况下单机并发超过400,事件池数建议为4(1的话容易单核打满)。事件池数越大,单轮完成耗时越短,但是CPU整体占用率越高。可根据耗时和CPU占用率找个平衡。OPUS格式情况下高并发,事件池数可为-1(CPU核数),当并发数较低(比如个位数)的时候事件池数可为1。 ##### 单机最大并发可达多少?  目前单机并发极限测试记录为1600,只要机器的网络性能和CPU占用率可承受,完成一轮的用时可接收,可继续提高并发数。 ## 安全提醒 3.1.14版本及以后,日志中已隐藏所有账号相关日志,可放心打开日志。