A simple chat made to play with Distributed actors.
Swift 5.9 is needed (was playing with new Swift Foundations, although removed in the end).
-
Install
brew install postgresql
-
Open
App/swift-chat.xcodeproj
-
Configure scheme environment for Frontend node to run a database (DB_USERNAME, DB_PASSWORD and DB_NAME)
-
Run
standalone
node either through Xcode schemes or using command line tools. You need to provide info on which node and where you want to start, e.g.standalone --host 127.0.0.1 --port 2550
. Additionaly you can start seperatefrontend
androom
nodes to play. Better start with frontend:frontend --host 127.0.0.1 --port 2550
and then room:room --host 127.0.0.1 --port 2551
-
Open
swift-chat
app on device/simulator. Create user and room name, and connect. Open another instance on different device/simulator and connect to the room by entering same name.
(no priorities, so no order)
Check if actors are cleaned from memory when websocket disconnects.Some database with simple event sourcing.Basic clustering with fault tolerance. Check different scenarios like room node crashes and etc.DATABASE NODE FAILURES ARE NOT HANDLED AT THE MOMENTCurrently Event sourcing is not there yet and rudimentary (without state, recovery and snapshoting). Invest some time into this.Interesting to play with Swift OpenAPI generator.- Add some basic documentation.
- Testing—at least covering
Room
,User
andUserRoomConnections
actors would be nice. - Tracing—debugging is quite hard thing even on a single node. Add Swift Distributed Tracing
- Improve scalibility and fault tolerance:
- Add node discovery logic.
- Improve error handling.
- Spining some example on real device/vps to get more info and for fun :)
- TBD