带有会话的Vapor 3 Websocket

时间:2019-01-18 09:29:40

标签: websocket vapor

在Vapor 2中,连接新的Websocket时可以访问会话。

例如:

setupRoutes(){

  socket("ws") { request, websocket in
    let session = try request.assertSession()
    guard let userId = session.data["user_id"]?.string else {
      ..
    }
}

在Vapor 3 configure.swift中:

let wss = NIOWebSocketServer.default()
  wss.get("ws") { websocket, request in

    --get session information--

    websocket.onText { websocket, text in
      websocket.send(text)
    }
 }
 services.register(wss, as: WebSocketServer.self)

使用Vapor 3,在将HTTP升级请求传递到WebsocketServer之前,将不会调用SessionMiddleware。 那么我该如何访问会话信息?

1 个答案:

答案 0 :(得分:0)

因此,我非常清楚该线程很旧,OP可能在几个月前找到了答案或放弃了。万一有人碰到这种情况,您是否可以使用websocket.session来访问会话?

这将生成Vapor 3代码

let wss = NIOWebSocketServer.default()
  wss.get("ws") { websocket, request in

    guard let userID = (try? websocket.session).data["user_id"]?.string else {
        ...
    }

    websocket.onText { websocket, text in
      websocket.send(text)
    }
 }
 services.register(wss, as: WebSocketServer.self)