As we discovered in the last chapter, our RealTimeServer class is incredibly difficult to work with. That’s because it’s trying to do two separate things: on the one hand, it’s trying to be a Socket.IO abstraction; on the other, it’s managing our server-side business logic. Each of those responsibilities makes the other unnecessarily complex. It’s time to fix it.