sudo curl -O https://raw.githubusercontent.com/angristan/openvpn-install/master/openvpn-install.sh
sudo chmod +x openvpn-install.sh
sudo ./openvpn-install.sh
根据提示选择
![如何通过 openvpn 连接服务器插图 如何通过 openvpn 连接服务器插图](https://blog.ezcomezgo.com/wp-content/uploads/2024/05/iShot_2024-05-29_10.58.02-1024x113.png)
下载配置文件
导入客户端即可连接
![如何通过 openvpn 连接服务器插图1 如何通过 openvpn 连接服务器插图1](https://blog.ezcomezgo.com/wp-content/uploads/2024/05/image-619x1024.png)
![如何通过 openvpn 连接服务器插图2 如何通过 openvpn 连接服务器插图2](https://blog.ezcomezgo.com/wp-content/uploads/2024/05/image-1-1024x539.png)
注意:如果是云服务器需要开放对应的tcp/udp端口
sudo curl -O https://raw.githubusercontent.com/angristan/openvpn-install/master/openvpn-install.sh
sudo chmod +x openvpn-install.sh
sudo ./openvpn-install.sh
根据提示选择
下载配置文件
导入客户端即可连接
注意:如果是云服务器需要开放对应的tcp/udp端口
function pick<T, U extends keyof T>(data: T, keys: U[]): { [K in U]: T[K] } { const obj: any = {}; for (const key of keys) { obj[key] = data[key]; } return obj; } const user = { name: 'Tom', age: 19, }; pick(user, ['name', 'age']);
ListenAddress 改为 0.0.0.0 或 ip地址
PermitRootLogin 改为 yes
使用 systemctl restart sshd 重启
scp local_file remote_username@remote_ip:remote_folder
scp local_file remote_username@remote_ip:remote_file
scp -r local_folder remote_username@remote_ip:remote_folder
scp remote_username@remote_ip:remote_folder local_file
scp remote_username@remote_ip:remote_file local_file
scp -r remote_username@remote_ip:remote_folder local_folder
[Service]
Environment=”HTTP_PROXY=http://192.168.0.49:3128″
Environment=”HTTPS_PROXY=http://192.168.0.49:3128″
mkdir /etc/systemd/system/docker.service.d && vim /etc/systemd/system/docker.service.d/http-proxy.conf
cd "$(brew --repo)"
git remote set-url origin https://mirrors.ustc.edu.cn/brew.git
cd "$(brew --repo)/Library/Taps/homebrew/homebrew-core"
git remote set-url origin https://mirrors.ustc.edu.cn/homebrew-core.git
重新执行 brew update
Spring Boot 中使用 SseEmitter 实现服务器推送消息的功能,可以通过维护一个连接池来记录当前连接数。具体步骤如下:
swiftCopy codeprivate final ConcurrentHashMap<String, SseEmitter> sseEmitterMap = new ConcurrentHashMap<>();
继续阅读“Spring Boot 中使用 SseEmitter 实现服务器推送消息” ConcurrentHashMap 是 Java 并发包中的一个线程安全的哈希表实现,可以在多线程环境下高效地并发读写,而不需要使用显式的同步机制(如 synchronized 关键字)。
ConcurrentHashMap 的主要特点如下:
总之,ConcurrentHashMap 是一种高效、线程安全、支持高并发和可扩展的哈希表实现,适用于多线程环境下的并发读写操作。
线程安全是指在多线程环境下,程序能够正确地执行,并且能够保证数据的正确性和一致性。当多个线程同时访问同一块内存区域或共享资源时,如果没有适当的同步机制,就会出现数据竞争(Data Race)的问题,导致程序出现不可预期的错误。因此,线程安全是多线程编程中非常重要的一个概念。
在保证线程安全的前提下,多线程程序应该能够正确地处理并发访问共享资源的情况,避免出现死锁、活锁、饥饿等并发问题,同时还要保证程序的性能和可伸缩性。
为了实现线程安全,一般采用以下几种方式:
总之,线程安全是多线程编程中最基本的要求,需要在程序设计和实现中始终考虑和保证。
Docker Compose 中的 networks 是用于定义 Docker 容器间通信的网络。在 Docker Compose 中,您可以创建一个或多个 networks,然后将服务(services)映射到这些 networks 中,从而使它们能够相互通信。
您可以使用 Docker Compose 中的 networks 来创建不同类型的网络,如 bridge、host、overlay 等等。Bridge 网络是默认的网络类型,可以用于在单个主机上的容器之间进行通信。Host 网络可以让容器直接使用主机网络,而不是在 Docker 引擎内部进行网络隔离。Overlay 网络则可以用于跨多个 Docker 主机进行通信。
在 Docker Compose 文件中定义 networks 的语法如下所示:
networks:
<network-name>:
[driver: <driver-name>]
[external: true|false]
[name: <network-name>]
[attachable: true|false]
[driver_opts: {}]
[internal: true|false]
其中,<network-name>
为网络名称,driver
为网络驱动程序名称,external
用于指定网络是否应该由 Docker Compose 创建,name
用于指定网络名称,attachable
用于指定网络是否可以附加到已运行的容器,driver_opts
用于指定网络驱动程序的特定选项,internal
用于指定是否应将网络标记为仅供容器内部使用。
旧的x86容器发现lua没法正常运行,导致宝塔一些服务和NGINX启动有点异常。
重新选择了支持arm框架的debian系统然后重新打包容器