扫码订阅《 》或入驻星球,即可阅读文章!

GOLANG ROADMAP

阅读模式

  • 沉浸
  • 自动
  • 日常
首页
Go友会
  • 城市
  • 校园
Go学院
  • Go小课
  • Go小考
  • Go实战
  • 精品课
Go求职
  • 求职辅导🔥
  • Offer收割社群
  • 企业题库
  • 面试宝典
Go宝典
  • 在线宝典
  • B站精选
  • 推荐图书
  • 每日博文
Go仓库
实验区
  • Go周边
  • Go下载
  • Go月刊
消息
更多
  • 用户中心

    • 我的信息
    • 推广返利
  • 玩转星球

    • 星球介绍
    • 角色体系
    • 星主权益
  • 支持与服务

    • 联系星主
    • 成长记录
    • 常见问题
    • 吐槽专区
  • 合作交流

    • 渠道合作
    • 课程入驻
    • 友情链接
author-avatar

GOLANG ROADMAP


首页
Go友会
  • 城市
  • 校园
Go学院
  • Go小课
  • Go小考
  • Go实战
  • 精品课
Go求职
  • 求职辅导🔥
  • Offer收割社群
  • 企业题库
  • 面试宝典
Go宝典
  • 在线宝典
  • B站精选
  • 推荐图书
  • 每日博文
Go仓库
实验区
  • Go周边
  • Go下载
  • Go月刊
消息
更多
  • 用户中心

    • 我的信息
    • 推广返利
  • 玩转星球

    • 星球介绍
    • 角色体系
    • 星主权益
  • 支持与服务

    • 联系星主
    • 成长记录
    • 常见问题
    • 吐槽专区
  • 合作交流

    • 渠道合作
    • 课程入驻
    • 友情链接
  • Iris框架中文文档

    • 概要
    • 功能列表
    • 安装
    • HTTP 主机配置
    • 配置信息
    • HTTP 路由
    • Context机制
    • 动态路由参数
    • 路由命名
    • 路由中间件
    • 打包Router
    • 错误处理
    • MVC 架构
    • MVC电影项目示例
    • MVC之Websockets
    • MVC中使用会话
    • 单一控制器
    • 视图(模板引擎)
    • 会话Sessions
    • Websocket

扫码订阅《 》或入驻星球,即可阅读文章!

Websocket


GOLANG ROADMAP

# Websockets

WebSocket (opens new window) 是一个通过 TCP 连接启用双向持久通信信道的协议。它可以用于聊天,股票行情以及游戏的应用场景中,任何你想使用实时功能的Web 应用程序中。

查看或者下载代码的 demo (opens new window).

# 什么时候使用 Websocket

当你需要使用直接使用套接字编程时,你可以使用 Websockets 实现。例如,对于实时的游戏,你可能需要最好的性能。

# 怎么使用 Websocket

  • 导入 "github.com/kataras/iris/websocket" 包
  • 对 WebSocket 包进行配置
  • 接受 Websocket 的请求
  • 发送和接收消息

# 导入 websocket 包

import "github.com/kataras/iris/websocket"
1

# 对 Websocket 包进行配置

import "github.com/kataras/iris/websocket"

func main() {
    ws := websocket.New(websocket.Config{
        ReadBufferSize:  1024,
        WriteBufferSize: 1024,
    })
}
1
2
3
4
5
6
7
8

# 完整的配置

// 配置 websocket 服务的配置
// 所有的配置都是可选的
type Config struct {
    // IDGenerator 用来创建(以及稍后设置)
    // 每一个传入 websocket 的链接(客户端)的ID
    // request 请求是一个参数,这个参数你可以用来生成 ID(例如,来自 headers)
    // 如果为空,则 ID 由DefaultGenerator 生成:
    IDGenerator func(ctx context.Context) string

    Error       func(w http.ResponseWriter, r *http.Request, status int, reason error)
    CheckOrigin func(r *http.Request) bool
    // HandshakeTimeout 指定握手完成的持续时间。
    HandshakeTimeout time.Duration
    // WriteTimeout time 是允许向连接里面写入信息的时间
    // 0 表示永远不超时
    // 默认值是 0
    WriteTimeout time.Duration
    // ReadTimeout time 是允许从连接里面读取信息的时间
    // 0 表示永远不超时
    // 默认值是 0
    ReadTimeout time.Duration
    // PongTimeout允许从连接中读取下一个pong消息的时间
    // 默认值时 60 * time.Second
    PongTimeout time.Duration
    // PingPeriod将ping消息发送到此期间的连接。 必须小于PongTimeout。
    // 默认值时 60 * time.Second
    PingPeriod time.Duration
    // MaxMessageSize 是允许一个 websocket 连接里消息的最大字节
    // 默认值时 1024
    MaxMessageSize int64
    // inaryMessages 将其设置为 true,以表示二进制数据消息而不是utf-8文本
    //兼容,如果您想使用 websockey 连接的 EmitMessage 将自定义二进制数据发送到客户端,如本机服务器 - 客户端通信
    // 默认是 false
    BinaryMessages bool
    // ReadBufferSize 是下划线阅读器的缓冲区大小
    // 默认值是 4096
    ReadBufferSize int
    // WriteBufferSize是下划线编写器的缓冲区大小
    // 默认值是 4096
    WriteBufferSize int
    // EnableCompression 指定服务器是否应尝试协商每个消息压缩(RFC 7692)。
		// 将此值设置为 true 并不能保证将支持压缩。
    // 目前仅支持“无上下文接管”模式
    EnableCompression bool

    // 子协议按优先顺序指定服务器支持的协议。
    // 如果设置了此字段,则Upgrade方法通过使用客户端请求的协议选
    // 择此列表中的第一个匹配来协商子协议。
    Subprotocols []string
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50

# 接受 WebSocket 的请求 & 发送消息 & 接收消息

import (
    "github.com/kataras/iris"
    "github.com/kataras/iris/websocket"
)

func main() {
    ws := websocket.New(websocket.Config{
        ReadBufferSize:  1024,
        WriteBufferSize: 1024,
    })

    ws.OnConnection(handleConnection)

    app := iris.New()
    // 在端点上注册一个服务.
    // 请参阅 websockets.html 中的内联 JavaScrip t代码,此端点用于连接到服务器。
    app.Get("/echo", ws.Handler())

    // 提供内置客户端库的 javascript,
    //请参阅 weboskcets.html 脚本标记,使用此路径。
    app.Any("/iris-ws.js", func(ctx iris.Context) {
        ctx.Write(websocket.ClientSource)
    })
}

func handleConnection(c websocket.Connection) {
    // 从浏览器中读取事件
    c.On("chat", func(msg string) {
        // 将消息打印到控制台,c .Context()是iris的http上下文。
        fmt.Printf("%s sent: %s\n", c.Context().RemoteAddr(), msg)
        // 将消息写回客户端消息所有者:
        // c.Emit("chat", msg)
        c.To(websocket.Broadcast).Emit("chat", msg)
    })
}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
  • Websockets
  • 什么时候使用 Websocket
  • 怎么使用 Websocket
  • 导入 websocket 包
  • 对 Websocket 包进行配置
  • 接受 WebSocket 的请求 & 发送消息 & 接收消息