如何通过 openvpn 连接服务器

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 连接服务器插图1
如何通过 openvpn 连接服务器插图2

注意:如果是云服务器需要开放对应的tcp/udp端口

scp远程复制

注:如果使用 root 用户,需要配置sshd_config文件 打开root远程登录

ListenAddress 改为 0.0.0.0 或 ip地址
PermitRootLogin 改为 yes

使用 systemctl restart sshd 重启

一、 从 本地 复制到 远程

1. 复制文件

(1.)不修改文件名

scp local_file remote_username@remote_ip:remote_folder

(2.)修改文件名

scp local_file remote_username@remote_ip:remote_file

2. 复制目录

scp -r local_folder remote_username@remote_ip:remote_folder

二、从 远程 复制到 本地

1. 从 复制文件

(1.)不修改文件名

scp remote_username@remote_ip:remote_folder local_file

(2.)修改文件名

scp remote_username@remote_ip:remote_file local_file

2. 复制目录

scp -r remote_username@remote_ip:remote_folder local_folder

Docker 网络代理配置

[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

brew update 更新失败

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 实现服务器推送消息

Spring Boot 中使用 SseEmitter 实现服务器推送消息的功能,可以通过维护一个连接池来记录当前连接数。具体步骤如下:

  1. 定义一个 ConcurrentHashMap 用于保存连接池,key 为用户 id 或其它唯一标识符,value 为 SseEmitter 对象。
swiftCopy codeprivate final ConcurrentHashMap<String, SseEmitter> sseEmitterMap = new ConcurrentHashMap<>();
继续阅读“Spring Boot 中使用 SseEmitter 实现服务器推送消息”

关于ConcurrentHashMap

ConcurrentHashMap 是 Java 并发包中的一个线程安全的哈希表实现,可以在多线程环境下高效地并发读写,而不需要使用显式的同步机制(如 synchronized 关键字)。

ConcurrentHashMap 的主要特点如下:

  1. 并发读写:ConcurrentHashMap 可以同时支持多个线程并发读取和写入数据,而不需要加锁。在读操作中,ConcurrentHashMap 采用了读写分离的技术,将数据分成了多个段,每个段都有自己的锁,不同线程对不同段的数据进行读取时不会互相干扰。
  2. 高效性能:ConcurrentHashMap 在多线程并发读写时可以保持高效性能,相比于同步的 HashMap,在并发读写时能够提供更高的吞吐量和更低的延迟。
  3. 线程安全:ConcurrentHashMap 是线程安全的,多个线程可以同时对其进行读写操作,不需要额外的同步机制,因此避免了死锁和其他并发问题。
  4. 支持高并发:ConcurrentHashMap 适用于高并发场景,可以应对大量的读写操作,并且具有较好的可伸缩性。
  5. 可扩展性:ConcurrentHashMap 支持动态扩容和收缩,可以根据实际情况自动调整内部数据结构的大小。

总之,ConcurrentHashMap 是一种高效、线程安全、支持高并发和可扩展的哈希表实现,适用于多线程环境下的并发读写操作。

什么是线程安全

线程安全是指在多线程环境下,程序能够正确地执行,并且能够保证数据的正确性和一致性。当多个线程同时访问同一块内存区域或共享资源时,如果没有适当的同步机制,就会出现数据竞争(Data Race)的问题,导致程序出现不可预期的错误。因此,线程安全是多线程编程中非常重要的一个概念。

在保证线程安全的前提下,多线程程序应该能够正确地处理并发访问共享资源的情况,避免出现死锁、活锁、饥饿等并发问题,同时还要保证程序的性能和可伸缩性。

为了实现线程安全,一般采用以下几种方式:

  1. 使用同步机制,如 synchronized 关键字、Lock 接口等,保证对共享资源的互斥访问。
  2. 使用并发集合,如 ConcurrentHashMap、ConcurrentLinkedQueue 等,保证对共享资源的并发访问。
  3. 避免使用共享资源,尽可能将状态封装到对象内部,使其成为线程独立的。
  4. 使用不可变对象,即对象一旦被创建就不能被修改,从而避免线程安全问题。

总之,线程安全是多线程编程中最基本的要求,需要在程序设计和实现中始终考虑和保证。

docker-compose 的 networks

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 用于指定是否应将网络标记为仅供容器内部使用。