当前位置: 首页 > news >正文

做山西杂粮的网站/网络优化工程师是做什么的

做山西杂粮的网站,网络优化工程师是做什么的,wordpress适配手机,网站上传图片不成功文章目录 前言websockifywebsockify 介绍websockify 使用 探索的过程提供基础TCP服务测试可用 实现Websocket客户端开始测试websockify功能再次启动websockify单独实现一个js版本websocket客户端 什么是VNC总结 前言 目前遇到一个问题,原本的服务都是利用tcp通信的…

文章目录

  • 前言
  • websockify
    • websockify 介绍
    • websockify 使用
  • 探索的过程
    • 提供基础TCP服务
      • 测试可用
    • 实现Websocket客户端
    • 开始测试websockify功能
      • 再次启动websockify
      • 单独实现一个js版本websocket客户端
  • 什么是VNC
  • 总结

前言

目前遇到一个问题,原本的服务都是利用tcp通信的,但是某些平台只支持websocket,是不是要从头实现一套websocket网络收发逻辑呢?短时间内有没有替代方案呢?在经过一番寻找之后发现了websockify这个神器,可以将websocket协议转换成tcp协议,从而实现不修改应用服务就支持tcp协议的目的,接下来就说说它怎么用,以及探索的过程。

websockify

websockify 介绍

websockify 是一个用于将 WebSocket 流量转发到其他协议的工具,它的主要用途之一是将 WebSockets 转发到基于 TCP 的协议,例如 VNC(Virtual Network Computing),以下是它的一些关键特点和用途:

  • WebSocket 转发: websockify 允许你将 WebSocket 流量转发到其他类型的网络服务,使得你可以通过 WebSocket 连接访问这些服务。

  • VNC 转发: websockify 最常用于将 WebSocket 转发到 VNC 服务器。这使得你可以通过 Web 浏览器访问运行 VNC 服务的远程计算机的桌面。

  • 安全性: websockify 支持加密通信,因此可以在安全连接上运行,提供更好的数据保护。

  • 协议适配: websockify 提供了一个通用的桥接机制,允许你将 WebSocket 连接转发到支持其他协议的服务,而不仅仅是 VNC。

  • JavaScript 客户端: websockify 还包括一个 JavaScript 客户端库,可以直接在浏览器中使用,无需额外的插件。

使用 websockify 的典型场景包括在 Web 浏览器中访问远程计算机的桌面,或者通过 WebSocket 连接到其他需要 TCP 连接的服务,在实际应用中,你可以通过命令行使用 websockify,也可以将其嵌入到其他应用程序中。

websockify 使用

在Ubuntu系统下可以直接使用以下安装:

$ sudo apt install websockify

下面是一个使用示例,作用是将原本连接到8765的websocket请求转换成tcp请求,TCP端口4321

$ websockify 8765 127.0.0.1:12346

启动后原本仅支持TCP协议的服务就可以通过websockify实现对websocket的支持了

探索的过程

虽然是短短的一条 websockify 8765 127.0.0.1:12346 命令就可以实现从websocket到tcp的转换,但是探索的过程却不顺利,在发现websockify这个神器之后,首先是测试它是否能满足我们的需求,是否好用,但是直接在原有的服务上测试太费时间,所以尝试写了几个模拟的脚本。

提供基础TCP服务

最基本的我们需要一个很能提供TCP服务的程序,这里我使用python写了一个回显的服务器 echoserver.py,绑定本地的12346端口

import socketdef main():# 创建一个TCP套接字server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)# 绑定IP地址和端口server_socket.bind(('127.0.0.1', 12346))# 监听连接server_socket.listen(5)print("服务器已启动,等待客户端连接...")while True:# 接受客户端连接client_socket, client_address = server_socket.accept()print(f"客户端{client_address}已连接")# 接收客户端发送的数据data = client_socket.recv(1024)print(f"收到来自{client_address}的数据: {data.decode('utf-8')}")# 将接收到的数据发送回客户端client_socket.send(data)print(f"已将数据发送回{client_address}")# 关闭客户端套接字client_socket.close()print(f"客户端{client_address}已断开连接")if __name__ == "__main__":main()

测试可用

  • 启动服务
$ python3 echoserver.py
服务器已启动,等待客户端连接...
  • 用nc命令发送tcp数据
$ echo "Hello server" | nc 127.0.0.1 12346
Hello server
  • TCP服务器看到的内容
服务器已启动,等待客户端连接...
客户端('127.0.0.1', 59214)已连接
收到来自('127.0.0.1', 59214)的数据: Hello server已将数据发送回('127.0.0.1', 59214)
客户端('127.0.0.1', 59214)已断开连接

TCP服务一切正常

实现Websocket客户端

因为python的运行环境是现成的,所以我又用它写了一个websocket客户端 wsclient.py 来发送数据,想运行的话得安装几个包

python3 -m pip install websocket
python3 -m pip install websocket-client

真实的情况下我是用websocket客户端连接nginx,然后将nginx转发到websockify监听端口,然后websockify将数据转成tcp连接应用服务,但是这个过程太复杂了,不利于说明问题,所以后面的内容我省掉nginx,假装它不存在,直接用websocket客户端连接websockify监听端口

# -*- coding: utf-8 -*-
# 运行websocket服务器import websocketdef on_message(ws, message):print(f"Received message: {message}")def on_error(ws, error):print(f"Error: {error}")def on_close(ws, close_status_code, close_msg):print(f"Connection closed with status code {close_status_code}")def on_open(ws):print("Connection opened")# 在连接建立后发送一条消息ws.send("abcd")if __name__ == "__main__":# WebSocket 服务器地址ws_url = "ws://10.10.49.172:8765"# 创建 WebSocket 连接ws = websocket.WebSocketApp(ws_url,on_message=on_message,on_error=on_error,on_close=on_close)# 设置连接建立时的回调函数ws.on_open = on_open# 启动 WebSocket 连接ws.run_forever()

为了websocket客户端的测试,我写了一个websocket服务器 wsserver.py 来接收数据,不过这不是一开始就测试了,而是在后面发现转换TCP失败查找原因,按流程分段测试时补充的脚本内容

import asyncio
import websocketsasync def echo(websocket, path):try:async for message in websocket:print(f"Received message: {message}")await websocket.send(message)except websockets.exceptions.ConnectionClosed:print("WebSocket connection closed")async def main():server = await websockets.serve(echo, "0.0.0.0", 12346)print("WebSocket server is running...")await server.wait_closed()if __name__ == "__main__":asyncio.run(main())

测试结果websocket客户端发送的数据,websocket服务器可以正常收到。

开始测试websockify功能

  • 启动tcp服务echoserver,监听12346端口
$ python3 echoserver.py
服务器已启动,等待客户端连接...
  • 启动tcp服务websockify,监听8765端口,转换到12346端口
$ websockify 8765 127.0.0.1:12346
WebSocket server settings:- Listen on :8765- No SSL/TLS support (no cert file)- proxying from :8765 to 127.0.0.1:12346
  • 运行websocket客户端发送的数据
$ python3 ./wsclient.py
Connection opened
Connection closed with status code 1003

报错了!!!

再看echoserver输出,虽然连接成功,但是收到的数据为空

客户端(‘127.0.0.1’, 55032)已连接
收到来自(‘127.0.0.1’, 55032)的数据:
已将数据发送回(‘127.0.0.1’, 55032)
客户端(‘127.0.0.1’, 55032)已断开连接

然后看下websockify输出,显示转发连接12346端口成功了,但是没有后续输出

$ websockify 8765 127.0.0.1:12346
WebSocket server settings:

  • Listen on :8765
  • No SSL/TLS support (no cert file)
  • proxying from :8765 to 127.0.0.1:12346
    10.2.48.36 - - [13/Dec/2023 20:03:11] 10.2.48.36: Plain non-SSL (ws://) WebSocket connection
    10.2.48.36 - - [13/Dec/2023 20:03:11] connecting to: 127.0.0.1:12346

定位问题吧,期间不断调整nginx配置,查看nginx和websockify日志,调整wsclient写法,调整echoserver写法,分步测试wsclient和echoserver功能都没发现问题,具体测试细节暂且不表,后来我发现可以修改websockify启动参数输出更详细的日志,测试过程如下

再次启动websockify

启动websockify再次使用wsclient测试,输出了额外的信息

$ websockify 8765 127.0.0.1:12346 --log-file /tmp/ws.log -v --traffic
WebSocket server settings:- Listen on :8765- No SSL/TLS support (no cert file)- proxying from :8765 to 127.0.0.1:12346
10.2.48.36: new handler Process
10.2.48.36 - - [13/Dec/2023 20:13:42] "GET / HTTP/1.1" 101 -
10.2.48.36 - - [13/Dec/2023 20:13:42] 10.2.48.36: Plain non-SSL (ws://) WebSocket connection
10.2.48.36 - - [13/Dec/2023 20:13:42] connecting to: 127.0.0.1:12346Traffic Legend:}  - Client receive}. - Client receive partial{  - Target receive>  - Target send>. - Target send partial<  - Client send<. - Client send partial
}.10.2.48.36 - - [13/Dec/2023 20:13:42] 127.0.0.1:12346: Client closed connection
10.2.48.36 - - [13/Dec/2023 20:13:42] 127.0.0.1:12346: Closed target

顺着结尾的两条日志 Client closed connection,我找到了这一篇问题
websockify - Client disconnects immediately after connection #365 结论说是websockify不支持发送文本了

Hmm… Are you trying to send text over that socket? We dropped support for text frames in the big cleanup.

Could you print the code and reason from the close in your close handler?

我一看我的wsclient.py可不就是发送的文本嘛,看来有救了,赶紧改成了发送bytes ws.send(b'\x01\x02\x03\x04'),但错误依旧,尝试各种发送函数无果,我严重怀疑我的换个python的websockets包有问题,所以我用html写了一个wsclient.html:

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>WebSocket Binary Data Example</title>
</head>
<body><script>// 替换为你的 WebSocket 服务器地址const socket = new WebSocket("ws://10.10.49.172:8765");// 监听连接打开事件socket.addEventListener("open", (event) => {console.log("WebSocket connection opened.");// 构造二进制数据,这里使用一个简单的示例const binaryData = new Uint8Array([49, 50, 51, 52]);// 发送二进制数据socket.send(binaryData);console.log("Binary data sent successfully.");});// 监听接收消息事件socket.addEventListener("message", (event) => {console.log("Received message:", event.data);});// 监听连接关闭事件socket.addEventListener("close", (event) => {console.log("WebSocket connection closed.");});// 监听错误事件socket.addEventListener("error", (event) => {console.error("WebSocket error:", event);});</script>
</body>
</html>

这次终于正常了,websockify输出变成了由应用服务主动断开

$ websockify 8765 127.0.0.1:12346 --log-file /tmp/ws.log -v --traffic
WebSocket server settings:- Listen on :8765- No SSL/TLS support (no cert file)- proxying from :8765 to 127.0.0.1:12346
10.2.48.36: new handler Process
10.2.48.36 - - [13/Dec/2023 20:24:29] "GET / HTTP/1.1" 101 -
10.2.48.36 - - [13/Dec/2023 20:24:29] 10.2.48.36: Plain non-SSL (ws://) WebSocket connection
10.2.48.36 - - [13/Dec/2023 20:24:29] connecting to: 127.0.0.1:12346Traffic Legend:}  - Client receive}. - Client receive partial{  - Target receive>  - Target send>. - Target send partial<  - Client send<. - Client send partial
}>{<10.2.48.36 - - [13/Dec/2023 20:24:29] 127.0.0.1:12346: Target closed connection
10.2.48.36 - - [13/Dec/2023 20:24:29] 127.0.0.1:12346: Closed target

echoserver也看到了发送的内容【1234】:

$ python3 echoserver.py
服务器已启动,等待客户端连接...
客户端('127.0.0.1', 37438)已连接
收到来自('127.0.0.1', 37438)的数据: 1234
已将数据发送回('127.0.0.1', 37438)
客户端('127.0.0.1', 37438)已断开连接

单独实现一个js版本websocket客户端

刚刚用html里的js发送了websocket数据,需要浏览器的帮助,如果是在服务器上局限性很大,所以我调整了一下,改成了js版本websocket客户端,用node.js运行,wsclient.js内容如下:

const WebSocket = require('ws');// 替换为你的 WebSocket 服务器地址
const socket = new WebSocket("ws://10.10.49.172:8765");// 监听连接打开事件
socket.addEventListener("open", (event) => {console.log("WebSocket connection opened.");// 构造二进制数据,这里使用一个简单的示例const binaryData = new Uint8Array([49, 50, 51, 52]);// 发送二进制数据socket.send(binaryData);console.log("Binary data sent successfully.");
});// 监听接收消息事件
socket.addEventListener("message", (event) => {console.log("Received message:", event.data);
});// 监听连接关闭事件
socket.addEventListener("close", (event) => {console.log("WebSocket connection closed.");
});// 监听错误事件
socket.addEventListener("error", (event) => {console.error("WebSocket error:", event);
});

运行结果如下:

$ node wsclient.js
WebSocket connection opened.
Binary data sent successfully.
Received message: <Buffer 31 32 33 34>
WebSocket connection closed.

至此,websockify的测试就结束了,它可以满足我们的需求,将websocket请求转换成tcp请求

什么是VNC

前面在介绍websockify多次提到VNC,其实VNC (Virtual Network Computing) 是一种远程桌面协议,允许用户在一个计算机上通过网络远程控制另一个计算机的桌面。VNC 提供了一种在远程计算机上查看和操作桌面的方式,就像你坐在那台计算机前一样,以下是关于 VNC 的一些关键概念:

  • Server:在 VNC 中,远程计算机上运行的应用程序称为 VNC 服务器。该服务器负责监听连接请求,并将计算机的桌面图像发送给连接的客户端。

  • Viewer:连接到 VNC 服务器的应用程序称为 VNC 查看器。这是用户使用的远程桌面客户端,允许他们查看和操作远程计算机的桌面。

  • Port:VNC 服务器通过一个特定的网络端口监听连接请求。通常,VNC 默认使用 5900 端口。如果有多个 VNC 服务器在同一台计算机上运行,它们可能使用不同的端口(5901、5902 等)。

  • Security:VNC 提供了一些安全性选项,如密码保护和加密。这有助于确保在远程访问时保护计算机的安全。

  • Authentication:VNC 服务器和查看器之间的连接通常需要身份验证。这可以是使用密码进行简单的身份验证,也可以是更复杂的加密和密钥交换过程。

  • websockify:对于一些场景,特别是在 Web 浏览器中访问 VNC,你可能会使用工具如 websockify 将 VNC 的协议转换为 WebSocket 协议,以便在浏览器中实现 VNC 远程桌面访问。

总结

  • websockify可以轻松实现从websocket请求向tcp请求的转换,使用很方便
  • 转换路径 wsclient --ws--> websockify --tcp--> tcp application --tcp--> websockify --ws--> wsclient
  • wss对应的是ws的加密版本,他们的关系是wss=ws+SSL/TSL,类似的https=http+SSL/TSL
  • 无论是nginx还是websockify都可以配置服务器证书,将应用服务器从SSL/TSL中解脱出来
  • VNC是一种远程桌面协议,允许用户在一个计算机上通过网络远程控制另一个计算机的桌面

==>> 反爬链接,请勿点击,原地爆炸,概不负责!<<==

迈出这一步确实不太容易,一旦行动了就会发现没有想象中的那么难,我们都没有预知未来的能力,无法判定目前的选择是对还是错,既然选择了就要努力走下去

相关文章:

利用websockify将websocket通信转换成tcp

文章目录 前言websockifywebsockify 介绍websockify 使用 探索的过程提供基础TCP服务测试可用 实现Websocket客户端开始测试websockify功能再次启动websockify单独实现一个js版本websocket客户端 什么是VNC总结 前言 目前遇到一个问题&#xff0c;原本的服务都是利用tcp通信的…...

【LeetCode刷题】-- 163.缺失的区间

163.缺失的区间 class Solution {public List<List<Integer>> findMissingRanges(int[] nums, int lower, int upper) {List<List<Integer>> res new ArrayList<>();for(int num : nums){if(lower < num){res.add(Arrays.asList(lower,num -…...

ClickHouse为何如此之快

针对ClickHouse为什么很快的问题&#xff0c;基于对ClickHouse的基础概念之上&#xff0c;一般会回答是因为是列式存储数据库&#xff0c;同时也会说是使用了向量化引擎&#xff0c;所以快。上面两方面的解释也都能够站得住脚&#xff0c;但是依然不能够解释真正核心的原因。因…...

Avalonia中如何将View事件映射到ViewModel层

前言 前面的文章里面我们有介绍在Wpf中如何在View层将事件映射到ViewModel层的文章,传送门,既然WPF和Avalonia是两套不同的前端框架,那么WPF里面实现模式肯定在这边就用不了,本篇我们将分享一下如何在Avalonia前端框架下面将事件映射到ViewModel层。本章内容还是在上一节的…...

(第42天)DataGuard 搭建之使用 Duplicate 复制

环境准备 本文讲解 Oracle 19C 环境通过 Duplicate 在线复制搭建单机 Active DataGuard 的完整步骤,以下为测试环境信息: 角色主机名IP地址数据库版本实例名DB名DB_UNIQUE名services名TNS名sys密码主lucifer10.211.55.20019CoradboradboradboradbORADB_PRIoracle备luciferdg…...

LeetCode 0070. 爬楼梯:动态规划(递推)

【LetMeFly】70.爬楼梯&#xff1a;动态规划&#xff08;递推&#xff09; 力扣题目链接&#xff1a;https://leetcode.cn/problems/climbing-stairs/ 假设你正在爬楼梯。需要 n 阶你才能到达楼顶。 每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢&#x…...

XMemcached network layout exception java.nio.channels.ClosedChannelException

java.nio.channels.ClosedChannelException 表示尝试在已关闭的通道上进行 I/O 操作&#xff0c;通常发生在网络连接意外关闭后尝试在关闭的通道上执行读取或写入操作。 XMemcached network layout exception 可能是由于 XMemcached 客户端在尝试与 Memcached 服务器通信时发生…...

记录 | vscode pyhton c++调试launch.json配置

下面提供 vscode 中 python 和 c 调试配置的 launch.json (好用&#xff0c;已用好几年&#xff0c;建议收藏) {// 使用 IntelliSense 了解相关属性。 // 悬停以查看现有属性的描述。// 欲了解更多信息&#xff0c;请访问: https://go.microsoft.com/fwlink/?linkid830387&qu…...

Java入门基础:浅显易懂 死循环

文章目录 一、什么是死循环二、以fo循环示例三、如何避免死循环 一、什么是死循环 死循环就是循环语句的 循环布尔表达式 一直为true&#xff0c;没有终止循环的条件或者终止循环的条件根本不可能达成 二、以fo循环示例 /** 终止循环的条件根本不可能达成* 循环布尔表达式&a…...

LeetCode刷题--- 验证二叉搜索树

个人主页&#xff1a;元清加油_【C】,【C语言】,【数据结构与算法】-CSDN博客 http://t.csdnimg.cn/ZxuNL个人专栏&#xff1a;力扣递归算法题 http://t.csdnimg.cn/ZxuNL 【C】 http://t.csdnimg.cn/c9twt 前言&#xff1a;这个专栏主要讲述递归递归、搜索与回溯算法&#x…...

go-zero 开发入门-加法客服端示例

定义 RPC 接口文件 接口文件 add.proto 的内容如下&#xff1a; syntax "proto3"; package add;// 当 protoc-gen-go 版本大于 1.4.0 时需加上 go_package&#xff0c;否则编译报错“unable to determine Go import path for” option go_package "./add&qu…...

Python 快速入门——基础语法

python 的语法逻辑完全靠缩进&#xff0c;建议缩进 4 个空格。 如果是顶级代码&#xff0c;那么必须顶格书写&#xff0c;哪怕只有一个空格也会有语法错误。 下面示例中&#xff0c;满足 if 条件要输出两行内容&#xff0c;这两行内容必须都缩进&#xff0c;而且具有相同的缩进…...

EasyRecovery2024苹果电脑mac破解版安装包下载

EasyRecovery是一款操作安全、价格便宜、用户自主操作的非破坏性的只读应用程序&#xff0c;它不会往源驱上写任何东西&#xff0c;也不会对源驱做任何改变。它支持从各种各样的存储介质恢复删除或者丢失的文件&#xff0c;其支持的媒体介质包括&#xff1a;硬盘驱动器、光驱、…...

Git常用命令大全

1.强制推送&#xff08;慎用&#xff0c;除非你认为其他冲突等可以丢弃 或者不是很重要&#xff09; git push -- force2.创建文件等小命令 touch a // 创建一个a文件 echo 1234 >> a // 把1234这个内容放入a文件 cat a // 打开a文件 读取出a文件中的内容 mkdir test /…...

vue项目本地正常运行,打包到线上时无法访问js等资源

nginx配置错误&#xff0c;如&#xff1a; location /aaa/ {gzip on;gzip_static on;try_files $uri $uri/ /aaa/index.html;alias /home/ec2-user/data/aaa/;#这里必须以斜杆结束&#xff0c;否则就会报错}前端配置文件错误&#xff0c;如&#xff1a; config/index.js文件的b…...

计网Lesson10 - 网络层之IP协议分析

文章目录 网络层协议IPv4 数据报格式IPv4 数据报首部格式版本&#xff08;Version&#xff09;首部长度&#xff08;Header Length&#xff09;区分服务&#xff08;Differentiated Services Field&#xff09;可选字段填充总长度&#xff08;Total Length&#xff09;标识、标…...

LangChain 25: SQL Agent通过自然语言查询数据库sqlite

LangChain系列文章 LangChain 实现给动物取名字&#xff0c;LangChain 2模块化prompt template并用streamlit生成网站 实现给动物取名字LangChain 3使用Agent访问Wikipedia和llm-math计算狗的平均年龄LangChain 4用向量数据库Faiss存储&#xff0c;读取YouTube的视频文本搜索I…...

Redis生产实战-热key、大key解决方案、数据库与缓存最终一致性解决方案

生产环境中热 key 处理 热 key 问题就是某一瞬间可能某条内容特别火爆&#xff0c;大量的请求去访问这个数据&#xff0c;那么这样的 key 就是热 key&#xff0c;往往这样的 key 也是存储在了一个 redis 节点中&#xff0c;对该节点压力很大 那么对于热 key 的处理就是通过热…...

可惜+悲伤+唉=emmo...

拟合曲线&#xff1a; 参考论文&#xff1a;黄河清.NURBS曲面逆向造型关键算法的研究与应用 [D].西北工业大学,2004 三次NURBS曲线控制点的计算 首先给出拟合曲线的具体步骤&#xff1a; 1、节点矢量的求解方法为&#xff1a; 采用积累弦长参数化法&#xff0c;即&#xff1…...

[gRPC实现go调用go]

1什么是RPC RPC&#xff1a;Remote Procedure Call&#xff0c;远程过程调用。简单来说就是两个进程之间的数据交互。正常服务端的接口服务是提供给用户端(在Web开发中就是浏览器)或者自身调用的&#xff0c;也就是本地过程调用。和本地过程调用相对的就是&#xff1a;假如两个…...

uniapp使用v-html调用接口,富文本图片 视频自适应大小

前端获取到后台数据 不做处理 就会出现下面问题 图片 视频超出视图显示不全 处理 //info 是富文本 <view v-ifinfo v-htmlreplaceWhite(info)></view>调用下面方法 replaceWhite(html) { // 处理富文本默认图片&#xff0c;视频大小let newContent html.replace…...

安卓MediaRecorder(2)录制源码分析

文章目录 前言JAVA new MediaRecorder() 源码分析android_media_MediaRecorder.cpp native_init()MediaRecorder.java postEventFromNativeandroid_media_MediaRecorder.cpp native_setup() MediaRecorder 参数设置MediaRecorder.prepare 分析MediaRecorder.start 分析MediaRec…...

MySql数据库全量备份脚本

#!/bin/bash# 设置数据库连接信息 DB_HOST"localhost" DB_USER"root" DB_PASS"密码" DB_NAMES("db1" "db2" "db3" "db4")# 设置备份目录 BACKUP_DIR"/home/mysql/mysql-back/everyday" # 每天…...

windows10下jdk安装

文章目录 windows10下jdk安装说明what安装包下载执行安装包验证是否安装成功 windows10下jdk安装 说明 操作系统&#xff1a;windows10 版本&#xff1a;1.8 what JDK(Java Development Kit) 是 Java 语言的软件开发工具包 安装包下载 https://www.oracle.com/java/techn…...

Centos7防火墙及端口开启

1、防火墙 1.1、查看防火墙是否开启 systemctl status firewalld 1.2、开启防火墙 firewall-cmd --list-ports 1.3、重启防火墙 firewall-cmd --reload 2、端口 2.1、查看所有已开启的端口号 firewall-cmd --list-ports 2.2、手动开启端口 启动防火墙后&#xff0c;默认没有开…...

vue开发,axios网络请求框架基本用法和封装

axios安装 npm install axiosaxios基本用法 默认的get请求&#xff0c;参数用params追加&#xff0c;多个参数通过json对象的方式&#xff0c;例如params:‘{type:“home”,page:1}’ axios({url: https://api.videolog.net.cn/baidu/token,params: }).then(value > {co…...

对比SPI、UART、I2C通信的区别与应用

SPI、UART、I2C通信是常用的数字通信协议&#xff0c;它们在不同的场景下有不同的应用。下面&#xff0c;我将分别介绍它们的特点、区别与应用。 SPI通信 SPI通信是一种串行同步通信协议&#xff0c;它的全称为“Serial Peripheral Interface”。SPI通信是一种单主多从的通信方…...

CentOS7安装MySQL8.0

一、使用Yum安装 1. 使用wget下载MySQL的rpm包 wget https://repo.mysql.com//mysql80-community-release-el7-3.noarch.rpm2. 安装下载好的rpm包 yum localinstall mysql80-community-release-el7-3.noarch.rpm 3. 安装mysql&#xff08;该步可能出现问题&#xff09; yum…...

【Go<—>Java】gRPC测试注意事项

在做go和Java之间gRPC调用之前需要完成以下两项工作&#xff1a; go语言版本的gRPC调用&#xff0c;实现server端和client端Java语言版本的gRPC调用&#xff0c;实现server端和client端 由于gRPC是跨语言的通信协议&#xff0c;所以我们可以相互调用&#xff0c;有以下2种调用…...

java面试题整合

1.Java数据类型 ✅ Java是一种静态类型语言&#xff0c;它具有丰富的数据类型用于声明变量和方法返回类型。Java中的数据类型分为两类&#xff1a;原始数据类型&#xff08;Primitive Data Types&#xff09;和引用数据类型&#xff08;Reference Data Types&#xff09;。 原…...