Websocket

未匹配的标注

Websockets

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

查看或者下载代码的 demo .

什么时候使用 Websocket

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

怎么使用 Websocket

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

导入 websocket 包

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

对 Websocket 包进行配置

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

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

完整的配置

// 配置 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
}

接受 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)
    })
}

本文章首发在 LearnKu.com 网站上。

本译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接
我们的翻译工作遵照 CC 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。

原文地址:https://learnku.com/docs/iris-go/10/webs...

译文地址:https://learnku.com/docs/iris-go/10/webs...

上一篇 下一篇
讨论数量: 0
发起讨论 只看当前版本


暂无话题~