Форум по Javascript
Anonymous
Почему мой WebSocket не подключается? Nextjs -> nginx -> Scala (Akka -HTTP)
Сообщение
Anonymous » 21 фев 2025, 21:14
фон:
У меня есть Scala (с Akka-http ) веб-сервер, работающий позади Nginx. У меня также есть приложение NextJS , работающее за тем же Nginx. Соединение с WebServer.
Я следовал официальной документации и рекомендациям, и это моя текущая реализация:
Сторона веб -сервера:
Код: Выделить всё
val responseQueue: mutable.Queue[ApiResponse] = mutable.Queue()
private def webSocketFlow: Flow[Message, Message, _] = {
Flow[Message].mapAsync(1) { _ =>
if (responseQueue.nonEmpty) {
system.log.info("Flushing responseQueue")
val response = responseQueue.dequeue()
val protobufMessage = ByteString(response.toByteArray)
Future.successful(BinaryMessage(protobufMessage))
} else {
system.log.warn("Response queue empty")
Future.successful(BinaryMessage(ByteString.empty))
}
}
}
private def websocketRoute: Route = {
pathPrefix("ws") {
pathEndOrSingleSlash {
extractRequest { req =>
// extract auth token from header
val tokenOpt = req.headers.collectFirst {
case header if header.name() == "Sec-WebSocket-Protocol" =>
OAuth2BearerToken(header.value()) // Extract the value of the Sec-WebSocket-Protocol header
}
system.log.info(s"Handling ws auth:${tokenOpt.toString}")
// run it through token verification
extractUri { uri =>
val callingURI = uri.toRelative.path.dropChars(1).toString
system.log.info(s"===== $callingURI")
oAuthAuthenticator(Credentials(tokenOpt), handleWebSocketMessages(webSocketFlow), callingURI).get
}
}
}
}
}
private def oAuthAuthenticator(credentials: Credentials, protectedRoutes: Route, callingURI: String): Option[Route] =
credentials match {
case p@Credentials.Provided(_) =>
system.log.info("Credentials provided")
val user = loggedInUsers.find(user => p.verify(user.oAuthToken.access_token))
if (user.isDefined) {
system.log.info(s"User found:${user.head.toString}")
val userPermissions = Permissions.valueOf(user.head.user.username.toUpperCase) //
Подробнее здесь: [url]https://stackoverflow.com/questions/79458181/why-is-my-websocket-failing-to-connect-nextjs-nginx-scalaakka-http[/url]
1740161641
Anonymous
[b] фон: [/b] У меня есть Scala (с Akka-http ) веб-сервер, работающий позади Nginx. У меня также есть приложение NextJS , работающее за тем же Nginx. Соединение с WebServer. Я следовал официальной документации и рекомендациям, и это моя текущая реализация: Сторона веб -сервера: [code] val responseQueue: mutable.Queue[ApiResponse] = mutable.Queue() private def webSocketFlow: Flow[Message, Message, _] = { Flow[Message].mapAsync(1) { _ => if (responseQueue.nonEmpty) { system.log.info("Flushing responseQueue") val response = responseQueue.dequeue() val protobufMessage = ByteString(response.toByteArray) Future.successful(BinaryMessage(protobufMessage)) } else { system.log.warn("Response queue empty") Future.successful(BinaryMessage(ByteString.empty)) } } } private def websocketRoute: Route = { pathPrefix("ws") { pathEndOrSingleSlash { extractRequest { req => // extract auth token from header val tokenOpt = req.headers.collectFirst { case header if header.name() == "Sec-WebSocket-Protocol" => OAuth2BearerToken(header.value()) // Extract the value of the Sec-WebSocket-Protocol header } system.log.info(s"Handling ws auth:${tokenOpt.toString}") // run it through token verification extractUri { uri => val callingURI = uri.toRelative.path.dropChars(1).toString system.log.info(s"===== $callingURI") oAuthAuthenticator(Credentials(tokenOpt), handleWebSocketMessages(webSocketFlow), callingURI).get } } } } } private def oAuthAuthenticator(credentials: Credentials, protectedRoutes: Route, callingURI: String): Option[Route] = credentials match { case p@Credentials.Provided(_) => system.log.info("Credentials provided") val user = loggedInUsers.find(user => p.verify(user.oAuthToken.access_token)) if (user.isDefined) { system.log.info(s"User found:${user.head.toString}") val userPermissions = Permissions.valueOf(user.head.user.username.toUpperCase) // Подробнее здесь: [url]https://stackoverflow.com/questions/79458181/why-is-my-websocket-failing-to-connect-nextjs-nginx-scalaakka-http[/url]