Play Scala WebSocket 示例项目教程
1. 项目的目录结构及介绍
play-scala-websocket-example/
├── app/
│ ├── actors/
│ │ ├── UserActor.scala
│ │ └── WebSocketActor.scala
│ ├── controllers/
│ │ └── HomeController.scala
│ ├── models/
│ │ └── Message.scala
│ ├── views/
│ │ └── index.scala.html
├── build.sbt
├── conf/
│ ├── application.conf
│ ├── logback.xml
│ └── routes
├── project/
│ ├── build.properties
│ └── plugins.sbt
├── public/
│ ├── images/
│ ├── javascripts/
│ └── stylesheets/
└── test/
└── controllers/
└── HomeControllerSpec.scala
目录结构介绍
- app/: 包含应用程序的源代码。
- actors/: 包含用于处理WebSocket连接的Akka actors。
- controllers/: 包含控制器类,处理HTTP请求。
- models/: 包含数据模型类。
- views/: 包含视图模板。
- build.sbt: 项目的构建配置文件。
- conf/: 包含应用程序的配置文件。
- application.conf: 主配置文件。
- logback.xml: 日志配置文件。
- routes: 路由配置文件。
- project/: 包含构建相关的配置文件。
- build.properties: 构建工具版本配置。
- plugins.sbt: 构建插件配置。
- public/: 包含静态资源文件。
- test/: 包含测试代码。
2. 项目的启动文件介绍
项目的启动文件主要是 app/controllers/HomeController.scala
,该文件定义了处理HTTP请求的控制器。
package controllers
import javax.inject._
import play.api.mvc._
import actors._
import akka.actor._
import play.api.libs.streams.ActorFlow
import play.api.Play.current
import play.api.libs.concurrent.Akka
@Singleton
class HomeController @Inject()(cc: ControllerComponents) extends AbstractController(cc) {
def index = Action { implicit request: Request[AnyContent] =>
Ok(views.html.index())
}
def socket = WebSocket.accept[String, String] { request =>
ActorFlow.actorRef { out =>
WebSocketActor.props(out)
}
}
}
启动文件介绍
- index: 处理根路径的HTTP请求,返回首页视图。
- socket: 处理WebSocket连接,创建并返回WebSocketActor。
3. 项目的配置文件介绍
application.conf
# This is the main configuration file for the application.
# https://www.playframework.com/documentation/latest/Configuration
play.http.secret.key = "changeme"
play.filters.enabled += "play.filters.cors.CORSFilter"
play.filters.cors {
allowedOrigins = ["http://localhost:9000"]
allowedHttpMethods = ["GET", "POST"]
allowedHttpHeaders = ["Accept", "Content-Type", "Origin", "X-Requested-With"]
}
配置文件介绍
- play.http.secret.key: 应用程序的密钥,用于加密和签名。
- play.filters.enabled: 启用CORS过滤器。
- play.filters.cors: 配置CORS过滤器,允许特定的源、HTTP方法和HTTP头。
logback.xml
<configuration>
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%date %level [%thread] %logger{10} [%file:%line] %msg%n</pattern>
</encoder>
</appender>
<root level="DEBUG">
<appender-ref ref="STDOUT" />
</root>
</configuration>
日志配置文件介绍
- **