MQTT 发布订阅
软件安装
服务端:mosquitto
下载页面:https://mosquitto.org/download/
MQTTX
下载页面:https://mqttx.app/zh#download
MQTT.fx
下载链接:http://www.jensd.de/apps/mqttfx/1.7.1/mqttfx-1.7.1-windows-x64.exe
备份的蓝奏云下载链接:https://ioufev.lanzout.com/irlNC064nc4f
MQTT 协议
MQTT 是物联网(Internet of Things,IoT)的 OASIS 标准消息传递协议。它被设计为一个极其轻量级的发布/订阅消息传输,非常适合用较小的代码占用和最小的网络带宽连接远程设备。
View DetailsMQTT vs. XMPP
XMPP 是老牌的即时聊天协议,像 Google Hangouts, WhatsApp Messenger 等即时聊天程序都是基于 XMPP 的。
而 MQTT 是最近几年随着物联网行业的发展,才慢慢进入公众视线的,像 Facebook Messenger App 使用了 MQTT 协议。
MQTT 的特点在于报文小,协议简单,提供了三个 QoS 级别。这几个特性是专门为网络环境复杂的物联网(IoT)场景设计的。
XMPP 特点在于协议和扩展协议成熟,功能完善,专门为即时聊天(IM)场景设计。
Java中List、Integer[]、int[] 的相互转换
本文涉及到一些 Java8 的特性。 int[]数组
1 |
int[] data = {4, 5, 3, 6, 2, 5, 1}; |
int[] 转 List<Integer>
1 |
List<Integer> list1 = Arrays.stream(data).boxed().collect(Collectors.toList()); |
Arrays.stream(arr) 可以替换成IntStream.of(arr)。 1.使用Arrays.stream将int[]转换成IntStream。 2.使用IntStream中的boxed()装箱。将IntStream转换成Stream<Integer>。 3.使用Stream的collect(),将Stream<T>转换成List<T>,因此正是List<Integer>。 int[] 转 Integer[]
1 |
Integer[] integers1 = Arrays.stream(data).boxed().toArray(Integer[]::new); |
前两步同上,此时是Stream<Integer>。 然后使用Stream的toArray,传入IntFunction<A[]> generator。 这样就可以返回Integer数组。 不然默认是Object[]。 List<Integer> 转 Integer[]
1 |
Integer[] integers2 = list1.toArray(new Integer[0]); |
调用toArray。传入参数T[] a。这种用法是目前推荐的。 List<String>转String[]也同理。 List<Integer> 转 int[]
1 |
int[] arr1 = list1.stream().mapToInt(Integer::valueOf).toArray(); |
想要转换成int[]类型,就得先转成IntStream。 这里就通过mapToInt()把Stream<Integer>调用Integer::valueOf来转成IntStream。 而IntStream中默认toArray()转成int[]。 Integer[] 转 int[]
1 |
int[] arr2 = Arrays.stream(integers1).mapToInt(Integer::valueOf).toArray(); |
思路同上。先将Integer[]转成Stream<Integer>,再转成IntStream。 Integer[] 转 List<Integer>
1 |
List<Integer> list2 = Arrays.asList(integers1); |
最简单的方式。String[]转List<String>也同理。 String 同理
1 2 3 4 5 6 |
// 同理 String[] strings1 = {"a", "b", "c"}; // String[] 转 List<String> List<String> list3 = Arrays.asList(strings1); // List<String> 转 String[] String[] strings2 = list3.toArray(new String[0]); |
完整代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 |
import java.util.Arrays; import java.util.List; import java.util.stream.Collectors; public class Main { public static void main(String[] args) { int[] data = {4, 5, 3, 6, 2, 5, 1}; // int[] 转 List<Integer> List<Integer> list1 = Arrays.stream(data).boxed().collect(Collectors.toList()); // Arrays.stream(arr) 可以替换成IntStream.of(arr)。 // 1.使用Arrays.stream将int[]转换成IntStream。 // 2.使用IntStream中的boxed()装箱。将IntStream转换成Stream<Integer>。 // 3.使用Stream的collect(),将Stream<T>转换成List<T>,因此正是List<Integer>。 // int[] 转 Integer[] Integer[] integers1 = Arrays.stream(data).boxed().toArray(Integer[]::new); // 前两步同上,此时是Stream<Integer>。 // 然后使用Stream的toArray,传入IntFunction<A[]> generator。 // 这样就可以返回Integer数组。 // 不然默认是Object[]。 // List<Integer> 转 Integer[] Integer[] integers2 = list1.toArray(new Integer[0]); // 调用toArray。传入参数T[] a。这种用法是目前推荐的。 // List<String>转String[]也同理。 // List<Integer> 转 int[] int[] arr1 = list1.stream().mapToInt(Integer::valueOf).toArray(); // 想要转换成int[]类型,就得先转成IntStream。 // 这里就通过mapToInt()把Stream<Integer>调用Integer::valueOf来转成IntStream // 而IntStream中默认toArray()转成int[]。 // Integer[] 转 int[] int[] arr2 = Arrays.stream(integers1).mapToInt(Integer::valueOf).toArray(); // 思路同上。先将Integer[]转成Stream<Integer>,再转成IntStream。 // Integer[] 转 List<Integer> List<Integer> list2 = Arrays.asList(integers1); // 最简单的方式。String[]转List<String>也同理。 // 同理 String[] strings1 = {"a", "b", "c"}; // String[] 转 List<String> List<String> list3 = Arrays.asList(strings1); // List<String> 转 String[] String[] strings2 = list3.toArray(new String[0]); } } |
from:https://zhuanlan.zhihu.com/p/196698839
View Detailsk8s集群 图文详细 部署安装使用(两万字)
因为我只有一台服务器,我使用的是,所有我采用的是通过安装虚拟机的方式实现集群搭建,先把需要的配置环境拉取下来,然后再通过虚拟机的克隆的方式直接把配置克隆到新的服务器上,减少重复下载。
通过在ubuntu服务器上安装VMware和在MAC上安装parallels desktop都有部署成功,安装虚拟机的实体机配置内存需要够,并且需要可以连接🛜,因为需要下载一些配置依赖,因为是安装k8s集群需要安装三台ubuntu容器。
centos7.9部署k8s的几种方式
1、使用kubeadm工具部署
kubeadm 是 Kubernetes 官方推荐的简化部署工具,能够快速初始化 Master 节点并加入 Worker 节点,自动化了很多设置过程。它还支持集群的升级和维护操作。这种方式相比手动部署更简便,但需要满足一定的硬件和软件环境要求。
2、基于二进制文件的部署方式
这种方式需要手动下载和安装 k8s 组件,包括 kube-apiserver、kube-controller-manager、kube-scheduler、kubelet、kube-proxy 等组件,并手动配置参数和启动命令。适合需要自定义配置和精细控制的场景,但也需要花费更多的时间和精力进行维护和升级。
3、云服务提供商的托管 Kubernetes 服务
众多云服务提供商如 Amazon EKS、Microsoft AKS、Google GKE 等提供了托管 Kubernetes 服务。通过这些服务,用户可以快速创建和管理 Kubernetes 集群,无需关心底层基础设施的维护,同时还能享受到云平台的自动扩展、监控和安全服务等高级功能。
4、使用容器镜像部署或自动化部署工具
包括但不限于使用容器镜像部署 Kubernetes 组件,或是利用自动化部署工具如 Ansible、Terraform、Kubespray、Rancher 等。这些方法通过预配置的模板或剧本自动化集群的安装和配置过程,适用于追求部署效率和标准化的场景。例如,Kubespray 是一个使用 Ansible 来部署 Kubernetes 集群的工具,支持多种云平台和本地环境。
k8s报错:The connection to the server localhost:8080 was refused
k8s的node节点使用kubectl命令时,如kubectl get pods --all-namespaces 出现如下错误:
1 2 |
[root@k8s ~]# kubectl get pods The connection to the server localhost:8080 was refused - did you specify the right host or port? |
解决办法1:使用一个非 root 账户登录,然后运行下列命令:
1 2 3 |
sudo cp /etc/kubernetes/admin.conf $HOME/ sudo chown $(id -u):$(id -g) $HOME/admin.conf export KUBECONFIG=$HOME/admin.conf |
解决办法2: 出现这个问题的原因是kubectl命令需要使用kubernetes-admin的身份来运行,在“kubeadm int”启动集群的步骤中就生成了“/etc/kubernetes/admin.conf”。 因此,解决方法如下,将主节点中的【/etc/kubernetes/admin.conf】文件拷贝到工作节点相同目录下:
1 2 3 |
#复制admin.conf,请在主节点服务器上执行此命令 scp /etc/kubernetes/admin.conf 172.16.2.202:/etc/kubernetes/admin.conf scp /etc/kubernetes/admin.conf 172.16.2.203:/etc/kubernetes/admin.conf |
然后分别在工作节点上配置环境变量:
1 2 3 |
#设置kubeconfig文件 export KUBECONFIG=/etc/kubernetes/admin.conf echo "export KUBECONFIG=/etc/kubernetes/admin.conf" >> ~/.bash_profile |
from:https://blog.csdn.net/qq_41893255/article/details/138166712
View Details调用摄像头拍照chrome浏览器报Cannot read properties of undefined (reading 'getUserMedia')
一、背景: 项目中使用电脑摄像头拍照,调用navigator.mediaDevices方法,在本地正常,测试环境和生产环境报错。 二、原因: navigator.mediaDevices在目前以下情况中可以获取到 1.地址为localhost://访问 2.协议为https 3.为文件访问file:/// 测试环境和生产环境使用的都是http协议,因此无法调用 三、解决方法 1.在chrome地址栏输入chrome://flags/#unsafely-treat-insecure-origin-as-secure 2.在Insecure origins treated as secure的输入框输入要打开网页的地址如http://xx.xx.xx:8080 3.把右边的Disnabled改成Enabled 4.点右下角的Relaunch 转自于:https://hepuhua.cn/post/942.html# from:https://www.cnblogs.com/Ao-min/p/18644211
View Details检查您的手机浏览器是否支持WebRTC技术
要检查您的手机浏览器是否支持WebRTC技术,可以通过以下方法: 方法1:使用WebRTC测试网站 访问测试网站: 在手机浏览器中,访问一个专门用于检测WebRTC支持的网站,例如Test WebRTC或WebRTC Troubleshooter. 这些网站会自动检测您的浏览器是否支持WebRTC,并给出相应的反馈。 查看测试结果: 网站会显示一系列测试结果,您可以查看是否所有的WebRTC相关功能都通过了测试。 方法2:手动检查浏览器设置 查看浏览器信息: 在浏览器的设置或帮助部分,查看浏览器的版本信息。通常,最新版本的主流浏览器(如Chrome, Safari, Firefox)都支持WebRTC。 更新浏览器: 如果您的浏览器不是最新版本,尝试更新到最新版。最新版本的浏览器更有可能支持WebRTC。 方法3:查找浏览器支持信息 在线查找: 在线搜索您手机上使用的浏览器名称以及“WebRTC support”,查看是否有关于该浏览器支持WebRTC的信息。 通过上述方法,您可以确认您的手机浏览器是否支持WebRTC。大多数现代浏览器都支持WebRTC,但如果发现您的浏览器不支持,可以考虑换用其他浏览器进行尝试。 from:https://blog.csdn.net/qq_52754410/article/details/134753983
View DetailsWebRTC + WebSocket 实现视频通话
WebRTC能让web应用和站点之间选择性地分享音视频流。在不安装其它应用和插件的情况下,完成点对点通信。 WebRTC背后的技术被实现为一个开放的Web标准,并在所有主要浏览器中均以常规JavaScript API的形式提供。对于客户端(例如Android和iOS),可以使用提供相同功能的库。 WebRTC是个开源项目,得到Google,Apple,Microsoft和Mozilla等等公司的支持。2011年6月1日开源并在Google、Mozilla、Opera支持下被纳入万维网联盟的W3C推荐标准。
View Details