golang go语言 反向 websocket 代理演示代码

golang go语言 反向 websocket 代理演示代码golanggo语言反向websocket代理演示代码通过go语言实现websocket反向代理功能packagemainimport( “fmt” “github.com/fasthttp/websocket” “github.com/valyala/fasthttp” proxy”github.com/yeqown/fasthttp-reverse-proxy” “log”)varupgraders=&websocket.FastHTTPUpgrad


Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

golang go语言 反向 websocket 代理演示代码
通过go语言实现websocket反向代理功能

package main

import (
	"fmt"
	"github.com/fasthttp/websocket"
	"github.com/valyala/fasthttp"
	proxy "github.com/yeqown/fasthttp-reverse-proxy"
	"log"
)

var upgraders = &websocket.FastHTTPUpgrader{ 
   
ReadBufferSize:  1024,
WriteBufferSize: 1024,
// 解决跨域问题
CheckOrigin: func(r *fasthttp.RequestCtx) bool { 
   
return true
},
}
//配置代理地址和路径
var (
	proxyServer = proxy.NewWSReverseProxy("192.168.0.62:9960", "/server/PUPPET_SERVER/toId-Server/123123")
)

func ProxyHandler(ctx *fasthttp.RequestCtx) { 
   
	switch string(ctx.Path()) { 
   
	case "/":
		proxyServer = proxy.NewWSReverseProxy("192.168.0.62:9960",string(ctx.Path()))

		proxyServer.ServeHTTP(ctx)
	default:
		proxyServer = proxy.NewWSReverseProxy("192.168.0.62:9960",string(ctx.Path()))
		/*ctx.Error("Unsupported path", fasthttp.StatusNotFound)*/
		proxyServer.ServeHTTP(ctx)
	}
}

func main() { 
   
	proxy.DefaultUpgrader=upgraders
	// 8081为监听端口
	if err := fasthttp.ListenAndServe(":8081", ProxyHandler); err != nil { 
   
		log.Fatal(err)
	}

	fmt.Println("hello")
}

go读取配置文件参考url地址:https://studygolang.com/subject/2

例如:访问地址:ws://127.0.0.1:8081/server/PUPPET_SERVER/toId-Server/456
代理并跳转地址:ws://192.168.0.62:9960/server/PUPPET_SERVER/toId-Server/456

代理是双向的,可以互相发送和接收信息

注:gateway网关也可以做代理功能,但是网关代理限制发送消息大小为64k,所以用go语言编写的代理是最好的选择。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/159480.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • linux复制文件夹下的所有文件到另一个文件夹_shell复制文件内容到另一个文件

    linux复制文件夹下的所有文件到另一个文件夹_shell复制文件内容到另一个文件Linux系统cp的用法:cp用于复制文件或目录。参数说明:-a:此选项通常在复制目录时使用,它保留链接、文件属性,并复制目录下的所有内容。其作用等于dpR参数组合。-d:复制时保留链接。这里所说的链接相当于Windows系统中的快捷方式。-f:覆盖已经存在的目标文件而不给出提示。-i:与-f选项相反,在覆盖目标文件之前给出提示,要求用户确认是否覆盖,回答”y”时目标文件将被覆盖…

    2022年8月23日
  • 5G科普——5G切片[通俗易懂]

    5G科普——5G切片[通俗易懂]切的是什么?先了解为什么会提出网络切片这一概念。5G服务是多样化的,包括车联网、大规模的互联网、工业自动化、远程医疗、VR/AR等这些服务对我们的要求是不一样的,有的低延时、高可靠;有的高清、高速率;有的大连接、低移动性;因此5G网络要满足差异化的业务,需要能够像搭积木一样灵活部署,方便新业务的上线下线,于是网络切片这一概念应运而生。3GPP定义:网络切片是提供特定网络能力和网络特性的逻辑网…

    2022年10月2日
  • deep learning with pytorch中文版_pytorch distributed

    deep learning with pytorch中文版_pytorch distributed憨批的语义分割重制版9——Pytorch搭建自己的DeeplabV3+语义分割平台注意事项学习前言什么是DeeplabV3+模型代码下载DeeplabV3+实现思路一、预测部分1、主干网络介绍2、加强特征提取结构3、利用特征获得预测结果二、训练部分1、训练文件详解2、LOSS解析训练自己的DeeplabV3+模型一、数据集的准备二、数据集的处理三、开始网络训练四、训练结果预测注意事项这是重新构建了的DeeplabV3+语义分割网络,主要是文件框架上的构建,还有代码的实现,和之前的语义分割网络相比,更加

    2022年8月21日
  • JSONObject与JSONArray的使用

    JSONObject与JSONArray的使用

    2021年11月15日
  • Smail语法「建议收藏」

    Smail语法「建议收藏」Smail语言首先了解什么是smail?apk文件通过apktool反编译出来的都有一个smali文件夹,里面都是以.smali结尾的文件。smali语言是Davlik的寄存器语言,语法上和汇编语言相似,DalvikVM[1]与JVM的最大的区别之一就是DalvikVM是基于寄存器的。基于寄存器的意思是,在smali里的所有操作都必须经过寄存器来进行。S…

    2022年10月22日
  • UPX脱壳详细分析

    UPX脱壳详细分析文章标题】:UPX脱壳详细分析【文章作者】:index09【使用工具】:UPX+OD+Stud_PE+ImportREC——————————————————————————–【详细过程】又被R公司鄙视了,每次都被相同的理由鄙视。哭……于是决定好好学一下逆向了。首先做个幼儿级的脱壳练习,当做开始吧。网上有很多类似文章,基本只写了找OEP的过程,这里稍加分

    2022年7月19日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号