Websockets

WebSocket是一种通过TCP连接实现双向持久通信通道的协议。它可用于聊天,股票行情,游戏等应用程序,您可以在Web应用程序中使用实时功能

查看代码示例.

何时使用它

需要直接使用套接字连接时,请使用WebSockets。例如,您可能需要实时游戏的最佳性能。

如何使用

  1. import the "github.com/kataras/iris/websocket"
  • import "github.com/kataras/iris/websocket"
  • 配置websockets包
  • 接收websocket包
  • 发送和接收消息
  1. func main() {
  2. ws := websocket.New(websocket.Config{
  3. ReadBufferSize: 1024,
  4. WriteBufferSize: 1024,
  5. })
  6. }

完整的配置

  1. //配置websocket服务器配置
  2. // 所有这些都是可选的
  3. type Config struct {
  4. // IDGenerator用于创建(以及稍后设置)
  5. //每个传入的websocket连接(客户端)的ID。
  6. //请求是一个参数,您可以使用它来生成ID(例如,来自标题)。
  7. //如果为空,则由DefaultIDGenerator生成ID:randomString(64)
  8. IDGenerator func(ctx context.Context) string
  9. Error func(w http.ResponseWriter, r *http.Request, status int, reason error)
  10. CheckOrigin func(r *http.Request) bool
  11. // HandshakeTimeout指定握手完成的持续时间。
  12. HandshakeTimeout time.Duration
  13. //允许WriteTimeout时间向连接写入消息。
  14. // 0表示没有超时。
  15. //默认值为0
  16. WriteTimeout time.Duration
  17. //允许ReadTimeout时间从连接中读取消息。
  18. // 0表示没有超时。
  19. //默认值为0
  20. ReadTimeout time.Duration
  21. // PongTimeout允许从连接中读取下一个pong消息。
  22. //默认值为60 * time.Second
  23. PongTimeout time.Duration
  24. // PingPeriod将ping消息发送到此期间的连接。必须小于PongTimeout。
  25. //默认值为60 * time.Second
  26. PingPeriod time.Duration
  27. // MaxMessageSize连接允许的最大消息大小。
  28. //默认值为1024
  29. MaxMessageSize int64
  30. // BinaryMessages将其设置为true,以表示二进制数据消息而不是utf-8文本
  31. //兼容,如果您想使用Connection的EmitMessage将自定义二进制数据发送到客户端,就像本机服务器 - 客户端通信一样。
  32. //默认为false
  33. BinaryMessages bool
  34. // ReadBufferSize是下划线阅读器的缓冲区大小
  35. //默认值为4096
  36. ReadBufferSize int
  37. // WriteBufferSize是下划线编写器的缓冲区大小
  38. //默认值为4096
  39. WriteBufferSize int
  40. // EnableCompression指定服务器是否应尝试协商每个
  41. //消息压缩(RFC 7692)。将此值设置为true则不会
  42. //保证支持压缩。目前只有“没有背景
  43. //支持“接管”模式。
  44. EnableCompression bool
  45. //子协议按顺序指定服务器支持的协议
  46. //偏好。如果设置了此字段,则Upgrade方法通过使用协议选择此列表中的第一个匹配来协商子协议
  47. //客户要求。
  48. Subprotocols []string
  49. }
  50. Accept WebSocket requests & send & receive messages
  51. import (
  52. "github.com/kataras/iris"
  53. "github.com/kataras/iris/websocket"
  54. )
  55. func main() {
  56. ws := websocket.New(websocket.Config{
  57. ReadBufferSize: 1024,
  58. WriteBufferSize: 1024,
  59. })
  60. ws.OnConnection(handleConnection)
  61. app := iris.New()
  62. // 在端点上注册服务器。
  63. // 请参阅websockets.html中的内联JavaScript代码,此端点用于连接到服务器。
  64. app.Get("/echo", ws.Handler())
  65. //提供javascript built'n客户端库,
  66. //请参阅weboskcets.html脚本标记,使用此路径。
  67. app.Any("/iris-ws.js", func(ctx iris.Context) {
  68. ctx.Write(websocket.ClientSource)
  69. })
  70. }
  71. func handleConnection(c websocket.Connection) {
  72. //从浏览器中读取事件
  73. c.On("chat", func(msg string) {
  74. // 将消息打印到控制台,c .Context()是iris的http上下文。
  75. fmt.Printf("%s sent: %s\n", c.Context().RemoteAddr(), msg)
  76. //将消息写回客户端消息所有者:
  77. // c.Emit("chat", msg)
  78. c.To(websocket.Broadcast).Emit("chat", msg)
  79. })
  80. }