akbashev/swift-chat
A simple chat made to play with [Distributed actors](https://www.swift.org/blog/distributed-actors/).
Run
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 seperate frontend and room 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-chatapp on device/simulator. Create participant and room name, and connect. Open another instance on different device/simulator and connect to the room by entering same name.
TODO:
(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 MOMENT~~
- ~~Currently 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,ParticipantandParticipantRoomConnectionsactors would be nice. - Tracing—debugging is quite hard thing even on a single node. Add Swift Distributed Tracing
- Improve scalibility and fault tolerance:
1. Add node discovery logic. 2. Improve error handling.
- Spining some example on real device/vps to get more info and for fun :)
- TBD
Package Metadata
Repository: akbashev/swift-chat
Stars: 84
Forks: 1
Open issues: 0
Default branch: main
Primary language: swift
License: Apache-2.0
README: README.md