Skip to content

akbashev/swift-chat

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

76 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

swift-chat

A simple chat made to play with Distributed actors.

Run

Swift 5.9 is needed (was playing with new Swift Foundations, although removed in the end).

  1. Install brew install postgresql

  2. Open App/swift-chat.xcodeproj

  3. Configure scheme environment for Frontend node to run a database (DB_USERNAME, DB_PASSWORD and DB_NAME)

  4. 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 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

  5. 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.

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, User and UserRoomConnections actors 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

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages