Golang web Iris框架mvc下使用websocket

前言

golang后端开发过程中遇到一些处理文件数据的接口,返回时间太长导致前端超时,就准备使用websocket来实现前后端通讯。iris官方给的websocket包里面的教程并没有涉及mvc的,改了很久都没法实现,就用了原生的websocket。前些天偶然在mvc包底下发现了websocket的范例,于是就学了下。发现教程并不能跑通,去看了github里面的反馈,https://github.com/kataras/neffos/issues/11 ,是跨域的问题,根据开发者的回复,修改了代码。

版本

go version 1.13 linux/amd64
iris版本是 11.2
运行环境是 CentOS 7

router

  • 注册路由
import (
	// 列几个关键的
	...
	gorillaWs "github.com/gorilla/websocket"
	"github.com/kataras/iris/websocket"
	"github.com/kataras/neffos/gorilla"
	"github.com/kataras/iris"
	"github.com/kataras/iris/mvc"
	...
)
var (
	//App : Iris服务对象
	App *iris.Application
	...
)

func init() {
   
	...
	App = iris.New()
	...
}

func RegisterWebsocketMvc(url string, wsController interface{
   }) *mvc.Application {
   
	// 定义mvc的路由地址
	wsRouter := App.Party(url)
	wsApp := mvc.New(wsRouter)
	// 绑定websocket的controller
	wsApp.HandleWebsocket(wsController)
	// 开启一个websocket
	wsServer := websocket.New(
		gorilla.Upgrader(gorillaWs.Upgrader{
   CheckOrigin: func(r *http.Request) bool {
    return true }}), wsApp)
	// Upgrader 有两种
	// 1. websocket.DefaultGobwasUpgrader
	// 2. websocket.DefaultGorillaUpgrader
	// 因为gorilla的upgrader有CheckOrigin限制,所以如果要使用gorilla, 需要使用如下
	// gorilla.Upgrader(gorillaWs.Upgrader{CheckOrigin: func(r *http.Request) bool { return true }})
	wsApp.Router.Get("", websocket.Handler(wsServer))
	return wsApp
}

#service

  • 在service层中注册并使用websocket

type wsController struct {
   
	*websocket.NSConn `stateless:"true"`
	Namespace         string
}

// 使用channel来实现协程通信
var msgToWS = make(chan string)
var stopChan = make(chan bool)

func init() {
   
	
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值