如何将本地websocket发布至公网并实现远程访问服务端

文章目录

        • 1. Java 服务端demo环境
        • 2. 在pom文件引入第三包封装的netty框架maven坐标
        • 3. 创建服务端,以接口模式调用,方便外部调用
        • 4. 启动服务,出现以下信息表示启动成功,暴露端口默认9999
        • 5. 创建隧道映射内网端口
        • 6. 查看状态->在线隧道,复制所创建隧道的公网地址加端口号
        • 7. 以基于go的socket客户端为例,通过公网连接java socket服务端
        • 8. 通过git下载websocket框架
        • 9. 创建客户端, 注意:Host值为上面复制的隧道公网地址!!
        • 10. 接着启动服务,与服务端连接,出现服务端返回的字样表示连接成功
        • 11. 客户端在控制台输入信息,回车
        • 12. 服务端出现客户端发送的信息
        • 13. 服务端控制台输入消息,回车
        • 14. 客户端收到服务端回复的消息,连接成功

1. Java 服务端demo环境
  • jdk1.8
  • 框架:springboot+maven
  • 工具IDEA
2. 在pom文件引入第三包封装的netty框架maven坐标
<dependency><groupId>io.github.fzdwx</groupId><artifactId>sky-http-springboot-starter</artifactId><version>0.10.6</version>
</dependency>

注意:pom文件里需注释掉springbootweb启动器,web启动器默认是tomcat服务启动,会和netty服务冲突

20221220152746

3. 创建服务端,以接口模式调用,方便外部调用
@GetMapping("/getConnect")
public void getConnect(HttpServerRequest request){request.upgradeToWebSocket(ws -> {ws.mountOpen(h->{ws.send("连接成功,开始聊天吧!");});ws.mountText(s -> {System.out.println(s);//对方回复System.out.println("客户端回复: "+s);//获取控制台输入的值Scanner scanner =new Scanner(System.in);String next = scanner.next();ws.send(next);});});}
4. 启动服务,出现以下信息表示启动成功,暴露端口默认9999

20221220152808

5. 创建隧道映射内网端口

这里我们用cpolar内网穿透来映射内网端口,它支持http/https/tcp协议,不限制流量,无需公网ip,也不用设置路由器,操作简单。

  • cpolar一键安装脚本:(国内用户)
curl -L https://www.cpolar.com/static/downloads/install-release-cpolar.sh | sudo bash
  • 或短链接安装方式:(国外用户)
curl -sL https://git.io/cpolar | sudo bash
  • 查看cpolar版本信息
cpolar version

如果正常显示,则安装成功

  • cpolar进行token认证

cpolar官网:https://www.cpolar.com/

进入cpolar官网,注册一个账号并登录进入后台,点击左侧的验证,可以查看到token码,复制并执行命令进行认证

cpolar authtoken xxxxxxxxxxxxxxxxxx
  • 配置cpolar开机自启动
sudo systemctl enable cpolar
  • 守护进程方式,启动cpolar
sudo systemctl start cpolar
  • 查看cpolar守护进程状态,如正常为active,则为正常启动状态
sudo systemctl status cpolar

cpolar安装成功后,默认会配置两个默认隧道:一个ssh隧道和一个website隧道,可自行删减或者修改。

接着把本地服务通过cpolar暴露到公网,浏览器访问http://127.0.0.1:9200,登录cpolar web ui 界面,创建一个tcp隧道,指向9999端口

20221220152822

注意:该隧道选择的是临时tcp地址和端口,24小时内会变化,如需固定tcp地址,可升级为专业套餐做tcp地址固定!

6. 查看状态->在线隧道,复制所创建隧道的公网地址加端口号

20221220152843

此时,websocket服务端已经从本地localhost暴露至公网,接着我们创建一个客户端测试公网访问socket服务端连接

7. 以基于go的socket客户端为例,通过公网连接java socket服务端
  • go版本:1.19
  • 工具:vscode
8. 通过git下载websocket框架
go get github.com/gorilla/websocket

20221220152904

9. 创建客户端, 注意:Host值为上面复制的隧道公网地址!!
package mainimport ("fmt""log""net/url""github.com/gorilla/websocket"
)func main() {// 定义服务端的地址u := url.URL{Scheme: "ws",Host:   "3.tcp.vip.cpolar.cn:10793", //地址为复制隧道的公网地址Path:   "/eth/getConnect"} //服务端controller 映射地址// 与服务端建立连接c, _, err := websocket.DefaultDialer.Dial(u.String(), nil)if err != nil {log.Fatal("dial:", err)}defer c.Close()// 阻塞主线程down := make(chan byte)// 启动一个线程,读取从服务端发送过来的数据go func() {for {_, message, _ := c.ReadMessage()fmt.Println("服务端回复:" + string(message))}}()//启动一个线程输入消息go func() {for {var input stringfmt.Scanln(&input)c.WriteMessage(websocket.TextMessage, []byte(input))}}()for {<-down}
}
10. 接着启动服务,与服务端连接,出现服务端返回的字样表示连接成功

20221220152924

11. 客户端在控制台输入信息,回车

20221220152933

12. 服务端出现客户端发送的信息

20221220152943

13. 服务端控制台输入消息,回车

20221220152951

14. 客户端收到服务端回复的消息,连接成功

20221220153000

需要注意,免费使用cpolar所生成的公网地址为随机临时地址,24小时内会发生变化。如果需要长期远程连接,建议为其配置固定的tcp端口地址。即登录cpolar官网后,点击预留,保留一个固定tcp端口地址,然后将其配置到相应的隧道中即可。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/299303.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

苹果发布了一个Ferret(雪貂)多模态大模型,在一个无人问津的角落被一位博主捞起来

苹果12月14日释放了一个名为Ferret的多模态大语言模型&#xff0c;有的翻译是雪貂&#xff0c;有的是法学硕士&#xff0c;要我说&#xff0c;还是叫雪貂吧&#xff0c;接地气亲民&#xff0c;将来犯蠢的时候出来发张雪貂的可爱表情包作公关就完事了&#xff0c;你个法学硕士到…

开源自托管导航页配置服务Dashy本地搭建结合内网穿透远程访问

开源自托管导航页配置服务Dashy本地搭建结合内网穿透远程访问 简介1. 安装Dashy2. 安装cpolar3.配置公网访问地址4. 固定域名访问 简介 Dashy 是一个开源的自托管的导航页配置服务&#xff0c;具有易于使用的可视化编辑器、状态检查、小工具和主题等功能。你可以将自己常用的一…

Typora Mac激活

首先去官网选择mac版本下载安装 typora下载 然后打开typora包内容找到 /Applications/Typora.app/Contents/Resources/TypeMark/page-dist 找到/static/js/Licen..如下图 编辑器打开上面文件夹 输入 hasActivated"true"e.hasActivated 进行搜索 将它改为 hasA…

3D渲染农场什么比较好用 2024渲染农场最新收费实测

随着数字设计领域的进步与发展&#xff0c;对于3D渲染服务的需求日益增加。3D渲染农场这一概念因此变得极为重要&#xff0c;特别是在电影制作、建筑可视化以及产品设计等行业中。现在&#xff0c;让我们深入了解3D渲染农场的定义以及市面上优秀的3D渲染服务提供商。 一、什么是…

unity HoloLens2开发,使用Vuforia识别实体 触发交互(二)(有dome)

提示&#xff1a;文章有错误的地方&#xff0c;还望诸位大神不吝指教&#xff01; 文章目录 前言一、打包到HoloLens二、Vuforia相关1.配置识别框2.制作一个半透明识别框&#xff1a;3.设置如下4.问题 四 HoloLens2 问题总结 前言 我使用的utniy 版本&#xff1a;Unity 2021.3…

如何使用内网穿透工具实现Java远程连接本地Elasticsearch搜索分析引擎

文章目录 前言1. Windows 安装 Cpolar2. 创建Elasticsearch公网连接地址3. 远程连接Elasticsearch4. 设置固定二级子域名 前言 简单几步,结合Cpolar 内网穿透工具实现Java 远程连接操作本地分布式搜索和数据分析引擎Elasticsearch。 Cpolar内网穿透提供了更高的安全性和隐私保…

【深度学习-目标检测】02 - Fast R-CNN 论文学习与总结

论文地址&#xff1a;Fast R-CNN 论文学习 1. 摘要&#xff08;Abstract&#xff09; Fast R-CNN方法的提出&#xff1a; 论文提出了一种快速区域卷积网络的办法&#xff0c;基于之前的R-CNN网络进行改进。 效率和准确性的提升&#xff1a; Fast R-CNN 在之前的工作基础上&a…

第 377 场周赛虚拟参赛记录及补题

最小数字游戏 3 题目 - 思路 模拟代码 class Solution { public:vector<int> numberGame(vector<int>& nums) {sort(nums.begin(),nums.end());vector<int> ans;for (int i 0;i < nums.size();i ) if (i&1)ans.push_back(nums[i-1]);else ans.…

Vue核心语法、脚手架与组件化开发、VueRouterVuex、综合案例(待办事项工具)

学习源码可以看我的个人前端学习笔记 (github.com):qdxzw/frontlearningNotes 觉得有帮助的同学&#xff0c;可以点心心支持一下哈 一、Vue核心语法 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name…

优维产品最佳实践第20期:控制台全链路监控

之前我们会觉得cmdb自动发现没有上报很难排查&#xff0c;弄不清楚数据的上报链路&#xff1b;监控指标的数据断点很难定位&#xff0c;flink对现场来说是一个黑盒子&#xff1b;apm数据更新不及时到底是上报异常还是入库失败呢&#xff1f; 现在控制台集成了对数据链路的监控…

RabbitMQ如何做到不丢不重

目录 MQTT协议 如何保证消息100%不丢失 生产端可靠性投递 ​编辑 RabbitMQ的Broker端投 &#xff08;1&#xff09;消息持久化 &#xff08;2&#xff09;设置集群镜像模式 &#xff08;3&#xff09;消息补偿机制 消费端 ACK机制改为手动 总结 MQTT协议 先来说下MQTT…

Pinia

Pinia是vue专属的最新状态管理库&#xff0c;是Vuex状态管理工具的替代品&#xff0c;中文官网 安装 yarn add pinia # 或者使用 npm npm install pinia使用 创建一个 pinia 实例 (根 store) 并将其传递给应用&#xff1a; import { createApp } from vue import { createP…