10月28

在线文字转语音接口

10:55Web开发  From: 本站原创
在线文字转语音,比如无障碍语音指读等可以使用:
https://tts.baidu.com/text2audio?tex=一瞬间的决定,往往可以改变很多,事实上,让自己成功的往往不是知识,是精神! 如果你总是为自己找借口,那只好让成功推迟。执行力,今天!&cuid=heck&cod=2&lan=zh&ctp=1&pdt=301&spd=5&per=0&vol=5&pit=5

https://fanyi.sogou.com/reventondc/synthesis?text=Heck%27s%20blog,一瞬间的决定,往往可以改变很多,事实上,让自己成功的往往不是知识,是精神! 如果你总是为自己找借口,那只好让成功推迟。执行力,今天!&speed=1&speaker=6


https://fanyi.baidu.com/gettts?lan=zh&text=一瞬间的决定,往往可以改变很多,事实上,让自己成功的往往不是知识,是精神! 如果你总是为自己找借口,那只好让成功推迟。执行力,今天!&spd=5&source=web


https://tts.youdao.com/fanyivoice?word=一瞬间的决定,往往可以改变很多,事实上,让自己成功的往往不是知识,是精神! 如果你总是为自己找借口,那只好让成功推迟。执行力,今天!&le=zh&keyfrom=speaker-target


https://api.microsofttranslator.com/V2/Http.svc/Speak?language=zh-CHS&appid=05DBC69E5594C137B9E22680F92F8E5E115A7817&text=一瞬间的决定,往往可以改变很多,事实上,让自己成功的往往不是知识,是精神! 如果你总是为自己找借口,那只好让成功推迟。执行力,今天!&format=audio/mp3&options=MaxQuality
10月18
今天有个接口查询条件超过6个字段了,将其改为对象方式接收,但发现Integer的字段的默认值 都变成0了,调试代码发现有个过滤器处理XSS的对参数进行BeanUtils.populate了。
于是Iteger类型的数据为空时填写–写”直接转为0

以上情况均不符合要求,数据库要求为integer的默认值NULL

后来查阅资料寻找到以下方法
ConvertUtils.register(new IntegerConverter(null), Integer.class);
通过转换器来设置为null时的默认转换值。其它类型依次类推设置为相应的基本类型的包装类即可。
10月13
我的服务器配置:linux+tomcat

出现现象:Linux服务器没有崩,有浏览器中访问页面,出现无法访问的情况,没有报4xx或5xx错误(假死),并且重启tomcat后,恢复正常。

原因:tomcat默认最大连接数(线程数)200个,默认每一个连接的生命周期2小时(7200秒),tomcat使用http 1.1协议,而http1.1默认是长连接。tomcat接受处理完请求后,socket没有主动关闭,因此如果在2小时内,请求数超过200个,服务器就会出现上述假死现象。

解决方案1:及时断开socket
protocol="org.apache.coyote.http11.Http11NioProtocol"


解决方案2:修改tomcat配置文件,修改最大连接数(增大)


修改server.xml配置文件,Connector节点中增加acceptCount和maxThreads这两个属性的值,并且使acceptCount大于等于maxThreads:

<Connector port="8080" protocol="HTTP/1.1"

            connectionTimeout="20000"  

           redirectPort="8443" acceptCount="500" maxThreads="400" />

解决方案3:修改linux的TCP超时时间(socket生命周期)限制

vi /etc/sysctl.conf
# Decrease the time default value for tcp_fin_timeout connection
net.ipv4.tcp_fin_timeout = 30
# Decrease the time default value for tcp_keepalive_time connection
net.ipv4.tcp_keepalive_time = 1800
# 探测次数
net.ipv4.tcp_keepalive_probes=2
# 探测间隔秒数
net.ipv4.tcp_keepalive_intvl=2

编辑完 /etc/sysctl.conf,要重启network 才会生效
[root@temp /]# /etc/rc.d/init.d/network restart
9月22
创建watermark.js文件

let watermark = {}

let setWatermark = (str) => {
let id = '1.23452384164.123412416';

if (document.getElementById(id) !== null) {
document.body.removeChild(document.getElementById(id));
}

//创建一个画布
let can = document.createElement('canvas');
//设置画布的长宽
can.width = 120;
can.height = 120;

let cans = can.getContext('2d');
//旋转角度
cans.rotate(-15 * Math.PI / 180);
cans.font = '18px Vedana';
//设置填充绘画的颜色、渐变或者模式
cans.fillStyle = 'rgba(200, 200, 200, 0.40)';
//设置文本内容的当前对齐方式
cans.textAlign = 'left';
//设置在绘制文本时使用的当前文本基线
cans.textBaseline = 'Middle';
//在画布上绘制填色的文本(输出的文本,开始绘制文本的X坐标位置,开始绘制文本的Y坐标位置)
cans.fillText(str, can.width / 8, can.height / 2);

let div = document.createElement('div');
div.id = id;
div.style.pointerEvents = 'none';
div.style.top = '30px';
div.style.left = '0px';
div.style.position = 'fixed';
div.style.zIndex = '100000';
div.style.width = document.documentElement.clientWidth + 'px';
div.style.height = document.documentElement.clientHeight + 'px';
div.style.background = 'url(' + can.toDataURL('image/png') + ') left top repeat';
document.body.appendChild(div);
return id;
}

// 该方法只允许调用一次
watermark.set = (str) => {
let id = setWatermark(str);
setInterval(() => {
if (document.getElementById(id) === null) {
  id = setWatermark(str);
}
}, 500);
window.onresize = () => {
setWatermark(str);
};
}

export default watermark;

9月8
Chrome无痕模式不存储任何信息,除了下载的东西除外,稍微能提升点速度,而且能很好的保护隐私,进入无痕模式有两种

第一种

点击浏览器右上角打开新的无痕窗口

第二种

右键点击Chrome图标属性  

点击在新窗口中浏览此图片

加上这个参数  --incognito

然后关闭浏览器重新再打开,直接就是无痕模式。
9月6
在nfs和nfs的守护进程rpcbind起来后,会由几个端口,防火墙需要打通,才能使客户端访问,否客户端列文件目录一直卡住,进不去挂载的目录。

nfs启动时会随机启动多个端口并向RPC注册,这样如果开启防火墙对NFS端口进行限制就会有点麻烦,可以更改配置文件固定NFS服务相关端口。这样设置固定端口以后即便重启机器也很方便挂载,如果不设置固定端口,机器或服务重启后之前防火墙添加的规则就失效了,

下面的是没有设置固定端口时的情况
点击在新窗口中浏览此图片


设置固定端口:

编辑 /etc/sysconfig/nfs 文件:

vim /etc/sysconfig/nfs
在文件最后添加如下内容:
##########################分割线###############################
MOUNTD_PORT=4001
STATD_PORT=4002
LOCKD_TCPPORT=4003
LOCKD_UDPPORT=4004
RQUOTAD_PORT=4005

添加后保存退出并重启 rpcbind和nfs

systemctl restart rpcbind
systemctl restart nfs
重启服务后再查看端口:
点击在新窗口中浏览此图片


nfs端口是2049,rpcbind的端口是111固定的,防火墙中也需要开启。

firewall-cmd --zone=public --add-port=4001-4005/tcp --permanent
firewall-cmd --zone=public --add-port=4001-4005/udp --permanent
firewall-cmd --zone=public --add-port=111/tcp --permanent
firewall-cmd --zone=public --add-port=111/udp --permanent
firewall-cmd --zone=public --add-port=2049/tcp --permanent
firewall-cmd --zone=public --add-port=2049/udp --permanent

firewall-cmd --reload
9月6
准备工作
1.下载nfs服务(服务端机和客户端机器都需要安装)
yum -y install rpcbind nfs-utils

2.关闭防火墙
systemctl stop firewalld

setenforce 0 ;

3. 编辑配置文件
vim /etc/exports

添加内容为:

/data/file 对应的主机或IP地址  例如:/data/file 192.168.11.66/24(rw,async)

4.启动nfs服务,启动rpc服务
systemctl  start rpcbind

systemctl start nfs

6、查看配置文件是否生效
showmount -e
输出如下:
Export list for mesapp1:
/data/file 192.168.11.66/24

7.客户端机先启动rpcbind服务再查看nfs服务可用目录

systemctl start rpcbind
systemctl enable rpcbind

showmount -e 192.168.1.66(服务器端IP地址)
输出如下:
Export list for 192.168.1.66:
/data/file 192.168.11.66/24

最后执行挂载命令

挂载:mount -t nfs 192.168.1.66:/data/file /data/file

异常如下:mount.nfs: No route to host

解决:
1、ping 服务器没有问题,网络是通的

2、服务端和客户端防火墙和 selinux 状态

firewall-cmd --state
显示是running
systemctl stop firewalld.service

注意:将服务器和客户端全部将防火墙关闭哦!

3.再次挂载,就OK

4.查看  showmount -e 192.168.1.66

会显示挂载的信息
9月5
假设我有一个包含一些静态数据的Docker容器。

通过docker-compose配置文件volumes参数

docker-compose.yml文件:

配置文件示例:

volumes:
  - /var/run/:/host/var/run/
  - /channel-artifacts:/var/hyperledger/configs
  - /data/logs:/tmp/logs/

把容器中/tmp/logs目录映射到宿主机根据目录下的/data/logs目录下。这两个目录会共享数据。

当使用命名卷并检查它时,它的工作方式与预期类似。
9月5
一. 问题描述
  在docker部署nacos的时候遇到了这个样子的问题No route to host 导致了nacos容器无法连接宿主机的docker数据库。
  然后我就进入到了nacos容器里面,ping了宿主机的地址,结果是通着的,然后使用telnet测试了3306端口,结果也会报出这个异常。
  原因是什么呢?明明数据库外部可以正常连接访问,但是宿主机内部容器确实无法访问?

二. 原因分析
  在进行docker部署的时候我们采用的是bridge网桥的模式。

  启动docker时,docker进程会创建一个名为docker0的虚拟网桥,用于宿主机与容器之间的通信。当启动一个docker容器时,docker容器将会附加到虚拟网桥上,容器内的报文通过docker0向外转发。

  如果docker容器访问宿主机,那么docker0网桥将报文直接转发到本机,报文的源地址是docker0网段的地址。而如果docker容器访问宿主机以外的机器,docker的SNAT网桥会将报文的源地址转换为宿主机的地址,通过宿主机的网卡向外发送。

  因此,当docker容器访问宿主机时,如果宿主机服务端口会被防火墙拦截,从而无法连通宿主机,出现No route to host的错误。

  而访问宿主机所在局域网内的其他机器,由于报文的源地址是宿主机ip,因此,不会被目的机器防火墙拦截,所以可以访问。

三. 解决方案
1> 关闭宿主机的防火墙
systemctl stop firewalld

2> 在防火墙上开发指定的端口
firewall-cmd --zone=public --add-port=3306/tcp --permanent
firewall-cmd --zone=public --add-port=3307/tcp --permanent
firewall-cmd --reload
注:在进行完防火墙的操作之后最好是要进行以下docker的重启,systemctl restart docker,否则容器到因为虚拟网桥失效而导致的iptables failed问题

四. 小结
  docker的容器网络连接一直是一个问题,容器与容器之间,容器与宿主机之间,容器跨主机访问,所以在涉及到容器的网络连接的时候要注意网络的问题。
9月5
Nacos微服务注册中心无法调用Docker容器中的服务
前言:
Nacos(注册中心)是通过 【 IP+PORT】 的形式调用其他服务。

问题:

Docker容器使用虚拟IP, 当Docker中的服务A,向Nacos注册的时候,Nacos获取到了Docker的内部IP, 导致另外一个服务B,想通过注册中心调用服务A, 但由于服务B从nacos注册中心获取到的是服务A的内部IP,这样导致了两个处于公网的微服务之间,无法互相访问!

解决办法:

将Docker中的服务网络配置与宿主机共用同一个IP, 此时服务向nacos注册的时候,nacos将会获取到宿主机的公网IP, 所以问题迎刃而解。

我的docker是使用docker-compose来启动的,具体配置如下:

version: '3'
services:
  iap-system:
    build:
      context: ./
      dockerfile: Dockerfile-system
    restart: always
    ports:
      - 19002:19002
    container_name: iap-system
    hostname: iap-system
    image: iap-system
    network_mode: "host"  # 与宿主机共有一个IP

当然,配置了上述网络类型后, nacos是可以拿到宿主机的IP, 但是此时拿到的是宿主机的内网IP, 解决办法如下:

spring:
  cloud:
    inetutils:
      ignored-interfaces: eth.*              # 忽略网卡,eth.*,正则表达式
      preferred-networks: ${discovery.server-ip}    # 选择符合前缀的IP作为服务注册IP, discovery.server-ip就是你的公网IP

解释:

启动 Docker的时候,用 --network 参数,可以指定网络类型

--network host

host: 主机网络使用 --network=host,此时,Docker 容器的网络会附属在主机上,两者是互通的。 例如,在容器中运行一个Web服务,监听8080端口,则主机的8080端口就会自动映射到容器中。

结果:

Nacos注册中心获取到宿主机IP, 微服务之间调用成功!

如有帮助,请赞赏鼓励!
分页: 6/66 第一页 上页 1 2 3 4 5 6 7 8 9 10 下页 最后页 [ 显示模式: 摘要 | 列表 ]