Go语言事件请求处理程序(Event Handler)

Python011

Go语言事件请求处理程序(Event Handler),第1张

在Go语言的代码中,您需要引入官方的SDK库 aliyun/serverless/fc-runtime-go-sdk/fc,并实现handler函数和main函数。 示例如下:

传入的event参数是一个包含key属性的JSON字符串,示例如下。

具体的示例解析如下:

有效的Event Handler签名如下:

其中,InputType和OutputType与encoding/json标准库兼容。

Event Handler的使用需遵循以下规则:

事件函数的Handler示例代码:

    运行panic异常一旦被引发就会导致程序崩溃,这当然不是我们愿意看到的,go语言提供乐专用于“拦截”运行时panic的内建函数-recover,它可以是当前的程序从运行时panic的状态中恢复并重新获得流程控制权。

    注意:recover只有在defer调用的函数中有效

    如果调用了内置函数recover,并且定义该defer语句的函数发生了panic异常,recover会使用程序从panic中恢复,并且返回panic value,导致panic异常的函数不会继续执行,但能正常返回。在未发生panic时调用recover,recover会返回nil。

最近打算为我的网站添加一个服务器资源监视功能,需要服务端主动向前端推动资源占用数据。这时Http则不能达到要求。所以自然想到采用websocket。以前使用SpringBoot时使用websocket很简单,只需要将ServerEndpointExporter注入到bean容器并配合相应注解即可创建一个websocket服务。这里要感谢各位前辈的封装让我们能尽快实现相应的功能,但本次出于学习目并不是公司项目(效率&稳定性至上)同时使用的开发语言为Golang,其web开发生态也不会像Java那样丰富,最后选择了开源实现 gorilla/websocket 项目地址

执行 go get github.com/gorilla/websocket 添加依赖

我们知道websocket由http升级而来,首先会发送附带Upgrade请求头的Http请求,所以我们需要在处理Http请求时拦截请求并判断其是否为websocket升级请求,如果是则调用 gorilla/websocket 库相应函数处理升级请求。

首相要创建Upgrader实例,该实例用于升级请求

其中 CheckOringin 是一个函数,该函数用于拦截或放行跨域请求。函数返回值为 bool 类型,即 true 放行, false 拦截。如果请求不是跨域请求可以不赋值,我这里是跨域请求并且为了方便直接返回 true

此时已经成功升级为websocket连接并获得一个conn实例,之后的发送接收操作皆有conn完成其类型为websocket.Conn。

首先向客户端发送消息使用 WriteMessage(messageType int, data []byte) ,参数1为消息类型,参数2消息内容

示例:

接受客户端消息使用 ReadMessage() 该操作会阻塞线程所以建议运行在其他协程上。该函数有三个返回值分别是,接收消息类型、接收消息内容、发生的错误当然正常执行时错误为 nil。一旦连接关闭返回值类型为-1可用来终止读操作。

示例:

同时可以为连接设置关闭连接监听,函数为 SetCloseHandler(h func(code int, text string) error) 函数接收一个函数为参数,参数为nil时有一个默认实现,其源码为:

可以看到作为参数的函数的参数为int和string类型正好和前端的close(long string)对应即前端调用close(long string)关闭连接后两个参数会被发送给后端并最终被 func(code int, text string) error 所使用。

示例:

则断开连接时将打印code和text

注意:要想使断连处理生效必须要有 ReadMessage() 操作否则不会触发断连处理操作。

以上是常用基础操作点击 官方API手册 学习更多。

最后:大幻梦森罗万象狂气断罪眼\ (••) /