Pekko HTTP / Scala.js WebSocket 聊天应用教程
1. 项目的目录结构及介绍
pekko-http-scala-js-websocket-chat/
├── backend/
│ └── src/
│ └── main/
│ └── scala/
│ └── example/
│ └── pekkowschat/
├── cli/
│ └── src/
│ └── main/
│ └── scala/
│ └── example/
│ └── pekkowschat/
├── docs/
├── frontend/
│ └── src/
│ └── main/
│ └── scala/
│ └── example/
│ └── pekkowschat/
├── project/
├── shared/
│ └── src/
│ └── main/
│ └── scala/
├── .gitignore
├── LICENSE
├── README.md
├── build.sbt
└── chat
目录结构介绍
- backend/: 包含后端代码,主要使用 Pekko HTTP 实现 WebSocket 服务器。
- cli/: 包含命令行接口代码。
- docs/: 包含项目文档。
- frontend/: 包含前端代码,主要使用 Scala.js 实现 WebSocket 客户端。
- project/: 包含 SBT 构建配置文件。
- shared/: 包含前后端共享的代码。
- .gitignore: Git 忽略文件配置。
- LICENSE: 项目许可证。
- README.md: 项目说明文档。
- build.sbt: SBT 构建文件。
- chat: 项目启动文件。
2. 项目的启动文件介绍
chat
chat
文件是项目的启动文件,用于启动整个应用。它包含了启动后端服务器和前端客户端的命令。
./chat
3. 项目的配置文件介绍
build.sbt
build.sbt
是 SBT 构建文件,包含了项目的依赖、版本和其他构建配置。
name := "pekko-http-scala-js-websocket-chat"
version := "0.1.0-SNAPSHOT"
scalaVersion := "2.13.8"
lazy val root = (project in file("."))
.aggregate(backend, frontend, shared.jvm, shared.js)
.dependsOn(backend, frontend)
lazy val backend = project
.settings(
libraryDependencies ++= Seq(
"com.typesafe.pekko" %% "pekko-http" % "10.2.7",
"com.typesafe.pekko" %% "pekko-stream" % "2.6.15",
"com.typesafe.pekko" %% "pekko-actor" % "2.6.15"
)
)
.dependsOn(shared.jvm)
lazy val frontend = project
.enablePlugins(ScalaJSPlugin)
.settings(
libraryDependencies ++= Seq(
"org.scala-js" %%% "scalajs-dom" % "1.1.0"
)
)
.dependsOn(shared.js)
lazy val shared = crossProject(JSPlatform, JVMPlatform)
.crossType(CrossType.Pure)
.settings(
libraryDependencies ++= Seq(
"com.lihaoyi" %%% "upickle" % "1.4.0"
)
)
lazy val sharedJVM = shared.jvm
lazy val sharedJS = shared.js
.gitignore
.gitignore
文件用于指定 Git 忽略的文件和目录。
target/
.idea/
*.iml
LICENSE
LICENSE
文件包含了项目的许可证信息,本项目使用 MIT 许可证。
MIT License
Copyright (c) 2022 jrudolph
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to