# socketio-demo **Repository Path**: SmilingCobra/socketio-demo ## Basic Information - **Project Name**: socketio-demo - **Description**: 代码原地址 https://github.com/googollee/go-socket.io - **Primary Language**: Go - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2021-11-29 - **Last Updated**: 2021-11-29 ## Categories & Tags **Categories**: Uncategorized **Tags**: Go语言 ## README # gosocket io使用说明 在官方的介绍中 https://socket.io/docs/v4/ 有这样的一段文字 The client will try to establish a [WebSocket](https://developer.mozilla.org/en-US/docs/Web/API/WebSocket) connection if possible, and will fall back on HTTP long polling if not. 客户端将会尝试进行WebSocket连接,如果失败则进行HTTP 的 长轮训。 在websocket不受支持的情况下,可以使用socket io实现前后端的长连接通讯。 作为示例,我将会介绍socket io的具体使用方式。 ## 1.后端部署 ```go import ( "log" "net/http" socketio "github.com/googollee/go-socket.io" "github.com/googollee/go-socket.io/engineio" "github.com/googollee/go-socket.io/engineio/transport" "github.com/googollee/go-socket.io/engineio/transport/polling" "github.com/googollee/go-socket.io/engineio/transport/websocket" ) ``` 需要的依赖如上所示。 首先需要构建一个go-socket.io类型的Server。用来监听和绑定事件。 ``` server := socketio.NewServer(&engineio.Options{ Transports: []transport.Transport{ &polling.Transport{ CheckOrigin: allowOriginFunc, }, &websocket.Transport{ CheckOrigin: allowOriginFunc, }, }, }) ``` ### 事件介绍 #### OnConnect 事件 连接建立之后出现进行的事件处理 (1)namespace string: 命名空间这个需要和前端进行沟通确认,前后端保持一致即可。 (2)f func(Conn) error: 一个需要开发者实现的函数,连接建立之后开发者可以进行的操作。 #### OnEvent事件 由前端主动发起的,按照事件类型进行查找后端处理逻辑 (1) namespace string: 命名空间这个需要和前端进行沟通确认,前后端保持一致即可。 (2)event string: 事件名称,这个可以用来区分不同的事件应该做的处理。 (3) f interface{}: 事件的处理逻辑 #### OnError事件 异常处理逻辑 (1)namespace string: 命名空间这个需要和前端进行沟通确认,前后端保持一致即可。 (2)f func(Conn) error: 一个需要开发者实现的函数,异常事件出现之后进行处理的逻辑。 #### OnDisconnect事件 断开连接事件 (1)namespace string: 命名空间这个需要和前端进行沟通确认,前后端保持一致即可。 (2)f func(Conn) error: 一个需要开发者实现的函数,连接断开之后开发者可以进行的操作。 ### 示例说明 ```go server.OnConnect("/", func(s socketio.Conn) error { s.SetContext("") log.Println("connected:", s.ID()) return nil }) server.OnEvent("/", "notice", func(s socketio.Conn, msg string) { log.Println("notice事件发生: ", msg) s.Emit("reply", "have "+msg) }) server.OnEvent("/", "eat", func(s socketio.Conn, msg string) { log.Println("eat事件发生: ", msg) s.Emit("reply", "eat "+msg) }) ``` 这里我定义了三个事件,对应连接事件和两个自定义的事件。前端发起调用之后,会根据配置的namespace和相应的事件名称和后端进行相应的逻辑匹配。 ## 2.前端部署 ```html