在Websocket期间避免MySQL连接

时间:2017-11-03 12:15:25

标签: mysql go websocket

我对go lang代码的流程有疑问。

  • 在我的main函数中,我打开mysql连接,然后使用`defer"在连接结束时关闭连接。

  • route设置并使用了WebSocket

我的问题是每次都会编程打开连接,WebSocket用于发送和接收消息,或者只是在页面加载后才会打开。

以下是我的代码的样子: -

package main

import (
    // Loading various package
)

func main() {

    // Opening DB connection   -> *sql.DB
    db := openMySql()

    // Closing DB connection
    defer db.Close()

    // Route for "websocket" end point
    app.Get("/ws", wsHandler(db))

    // Another route using "WebSocket" endpoint.
    app.Get("/message", message(db))
}

现在,当用户处于" message"路由,每当他向其他用户发送消息时,每次发送消息时都会发生mysql - openclose连接事件,并使用" /ws"路线?

或者只会发生一次?每当" /message"路线和" /ws"事件第一次被召唤。

  • 我的目的是使用" db" in" wsHandler"功能是验证并检查用户是否有权向特定房间发送消息。

  • WebSocket发出messagetyping事件时,每秒都无法打开和关闭连接。

在" / ws"中处理权限检查的最佳方法是什么?路由,如果上面的代码是恐怖的?考虑到一个事实,将有几十万并发用户。

1 个答案:

答案 0 :(得分:1)

假设db *sql.DB您的代码似乎没问题,我也假设您的示例不完整,而main实际上并未立即返回。

Open状态的文档:

  

返回的数据库对于多个goroutine和并发使用是安全的   维护自己的空闲连接池。因此,Open功能   应该只召唤一次。很少需要关闭数据库。

所以wsHandlermessage可以随意使用它,只要它们不会自己关闭数据库。