我的代码

import com.google.common.collect.ImmutableMap;
import com.google.common.io.ByteArrayDataOutput;
import com.google.common.io.ByteStreams;
import com.google.gson.Gson;
import com.xxx.web.open.service.CacheService;
import com.xxx.web.open.util.AudioStreamHelper; import lombok.Setter;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.tuple.ImmutablePair;
import org.java_websocket.enums.ReadyState;
import org.java_websocket.client.WebSocketClient;
import org.java_websocket.handshake.ServerHandshake;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.util.DigestUtils; import java.io.File;
import java.net.URI;
import java.nio.ByteBuffer;
import java.util.Map;
import java.util.Objects;
import java.util.UUID;
import java.util.concurrent.locks.ReentrantLock; /***
* 离线语音合成
*/
@Slf4j
@Component("ttsService")
public class OfflineTTSService extends WebSocketClient {
public String textToSpeech(String text, String speakerId) throws InterruptedException {
/***
* 根据请求的内容计算hash值,防止请求重放,产生不必要的请求,浪费服务器资源(内存、cpu、硬盘空间)
* hash值产生算法:
* 1、byteArrayOf("tts")+byteArrayOf("待转换的文字")
* 2、byteArrayOf("asr")+音频流二进制 byte[]
* 3、byteArrayOf("merge") + 文件流 byteArray1[] + 文件流byteArray2[] + ... 文件流 byteArrayN[]
*/
ImmutablePair<Boolean, String> result = findConversion(computeHash(text,speakerId)); Boolean existed = result.getLeft();
if(existed)
{
String uuid = result.getRight();
log.warn("重复的合成请求:{}",uuid);
return uuid;
} synchronized (this)
{
if(getReadyState()==ReadyState.NOT_YET_CONNECTED) {
if(isClosed()) {
reconnectBlocking();
}else{
connectBlocking();
}
}else if(getReadyState() == ReadyState.CLOSED){
reconnectBlocking();
}
}
}

之前的方法

import com.google.common.collect.ImmutableMap;
import com.google.common.io.ByteArrayDataOutput;
import com.google.common.io.ByteStreams;
import com.google.gson.Gson;
import com.x.web.open.service.CacheService;
import com.x.web.open.util.AudioStreamHelper; import lombok.Setter;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.tuple.ImmutablePair;
import org.java_websocket.enums.ReadyState;
import org.java_websocket.client.WebSocketClient;
import org.java_websocket.handshake.ServerHandshake;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.util.DigestUtils; import java.io.File;
import java.net.URI;
import java.nio.ByteBuffer;
import java.util.Map;
import java.util.Objects;
import java.util.UUID;
import java.util.concurrent.locks.ReentrantLock; /***
* 离线语音合成
*/
@Slf4j
@Component("ttsService")
public class OfflineTTSService extends WebSocketClient {
public String textToSpeech(String text, String speakerId) throws InterruptedException {
/***
* 根据请求的内容计算hash值,防止请求重放,产生不必要的请求,浪费服务器资源(内存、cpu、硬盘空间)
* hash值产生算法:
* 1、byteArrayOf("tts")+byteArrayOf("待转换的文字")
* 2、byteArrayOf("asr")+音频流二进制 byte[]
* 3、byteArrayOf("merge") + 文件流 byteArray1[] + 文件流byteArray2[] + ... 文件流 byteArrayN[]
*/
ImmutablePair<Boolean, String> result = findConversion(computeHash(text,speakerId)); Boolean existed = result.getLeft();
if(existed)
{
String uuid = result.getRight();
log.warn("重复的合成请求:{}",uuid);
return uuid;
} synchronized (this)
{
if(!isOpen()) {
connectBlocking();
}
}
}

经过以上修改解决问题

其他地方调用者服务

 @Autowired
OfflineTTSService ttsService;
@Configuration
public class WebAppConfig extends WebMvcConfigurerAdapter {
@Bean
public URI serverUri() throws URISyntaxException {
return new URI("ws://xxx.yyy.zzz.aaa:8081/test");
}
}

Java-WebSocket调用报错:WebSocketClient objects are not reuseable的更多相关文章

  1. dubbo 使用zookeeper 出现 Dubbo客户端调用报错NullPointerException

    现在将网上的方法总结一下 方法一:.https://blog.csdn.net/u011294519/article/details/81810631 dubbo-provider.xml:提供者先扫 ...

  2. protobuf接口调用报错:java.nio.charset.MalformedInputException: Input length = 1

    使用protobuf定义的接口api发起http请求报错,日志如下: [-- ::] DEBUG AbstractPool: - server updated, node=, server={ nod ...

  3. jmeter 启动jmeter-server.bat远程调用报错: java.io.FileNotFoundException: rmi_keystore.jks (系统找不到指定的文件。)

    1.找到apache-jmeter-5.0\bin\jmeter.properties 2.修改server.rmi.ssl.disable=true (记得去除server.rmi.ssl.disa ...

  4. 【技术贴】webservice cxf2 客户端动态调用报错No operation was found with the name

    No operation was found with the name xxx 出错原因是因为发布服务的接口所在包路径和此接口实现类包路径不一致,比如你的服务接口可能放在了包com.x.interF ...

  5. springboot多模块项目下,子模块调用报错:程序包xxxxx不存在

    今天在用springboot搭建多模块项目,结构中有一个父工程Parent  一个通用核心工程core 以及一个项目工程A 当我在工程A中引入core时,没有问题,maven install正常 当我 ...

  6. CFX客户端调用报错

    Exception in thread "main" javax.xml.ws.soap.SOAPFaultException: Unmarshalling Error: unex ...

  7. bug:进程可调用函数而子线程调用报错

    在调试摄像头时遇到问题:在主进程里调用下述函数能够成功,但在子线程里创建时总是失败,错误打印为 sched: RT throttling activated. UniqueObj<OutputS ...

  8. Weblogic10.3.6部署解决CXF webService 调用报错: “Cannot create a secure XMLInputFactory”

    一,解决步骤 1.添加jar包 stax2-api-3.1.4.jar woodstox-core-asl-4.4.1.jar 2.编写监听器 package com.neusoft.cxf.list ...

  9. VS2017 Thrift编译出的Release版本的库调用报错LNK2001

    在使用thrift的过程中, 当我使用完thrift debug版本编译出来的库调试完成后, 改成release版本的时候, 就出现了如下错误, 莫名其妙啊, 同一套代码, 那只能是编译库的时候设置和 ...

随机推荐

  1. 基于 CSS 的 Web 框架 CJSS

    CJSS 是一个基于 CSS 的 Web 框架,所有效果都在 CSS 文件中生效,可以在 CSS 中使用它添加更多功能,或者构建一个完整的页面. 使用方法: HTML 想要使用某个组件,在 CSS 文 ...

  2. 面试官:讲讲mysql表设计要注意啥

    内容时参考一个博主的,内容写的很好,就忍不住拿过来了,如遇到,请见谅 参考连接:https://www.cnblogs.com/rjzheng/p/11174714.html

  3. QSlider 样式

    https://doc.qt.io/archives/qt-4.8/stylesheet-examples.html #if 0 m_sliderVoice->setStyleSheet(&qu ...

  4. 56、servlet3.0-与SpringMVC整合分析

    56.servlet3.0-与SpringMVC整合分析 web容器在启动的时候,会扫描每个jar包下的META-INF/services/javax.servlet.ServletContainer ...

  5. Learning Spark (Python版) 学习笔记(一)----RDD 基本概念与命令

    <Learning Spark>这本书算是Spark入门的必读书了,中文版是<Spark快速大数据分析>,不过豆瓣书评很有意思的是,英文原版评分7.4,评论都说入门而已深入不足 ...

  6. SQL死锁处理

    查询死锁 select request_session_id spid, OBJECT_NAME(resource_associated_entity_id) tableName from sys.d ...

  7. /dev/null和/dev/zero的作用

    经常会看到dd命令用到/dev/zero文件,这里总结一下/dev/null和/dev/zero的作用和使用实例. 在类Unix系统(包括Linux)中,/dev/null 它是空设备,也称为位桶(b ...

  8. P2313 [HNOI2005]汤姆的游戏

    题目描述 汤姆是个好动的孩子,今天他突然对圆规和直尺来了兴趣.于是他开始在一张很大很大的白纸上画很多很多的矩形和圆.画着画着,一不小心将他的爆米花弄撒了,于是白纸上就多了好多好多的爆米花.汤姆发现爆米 ...

  9. (7)打鸡儿教你Vue.js

    计算属性 computed <div id="app"> {{ message.split('').reverse().join('') }} </div> ...

  10. express+mongoDB(mLab)做一个todolist小项目

    这是在网课上学习的,先建立一个express-todolist文件夹作为项目跟目录 另外,我们直接把项目上用到的css文件和js文件下载下来放在项目里 这里直接贴出来 先建立一个public文件夹,放 ...