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
standalonenode 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 seperatefrontendandroomnodes to play. Better start with frontend:frontend --host 127.0.0.1 --port 2550and then room:room --host 127.0.0.1 --port 2551 -
Open
swift-chatapp 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,UserandUserRoomConnectionsactors 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