GithubHelp home page GithubHelp logo

Nelly's Projects

follower-maze-soundcloud icon follower-maze-soundcloud

## The Challenge The challenge proposed here is to build a system which acts as a socket server, reading events from an *event source* and forwarding them when appropriate to *user clients*. Clients will connect through TCP and use the simple protocol described in a section below. There will be two types of clients connecting to your server: - **One** *event source*: It will send you a stream of events which may or may not require clients to be notified - **Many** *user clients*: Each one representing a specific user, these wait for notifications for events which would be relevant to the user they represent ### The Protocol The protocol used by the clients is string-based (i.e. a `CRLF` control character terminates each message). All strings are encoded in `UTF-8`. The *event source* **connects on port 9090** and will start sending events as soon as the connection is accepted. The many *user clients* will **connect on port 9099**. As soon as the connection is accepted, they will send to the server the ID of the represented user, so that the server knows which events to inform them of. For example, once connected a *user client* may send down: `2932\r\n`, indicating that they are representing user 2932. After the identification is sent, the *user client* starts waiting for events to be sent to them. Events coming from *event source* should be sent to relevant *user clients* exactly like read, no modification is required or allowed. ### The Events There are five possible events. The table below describe payloads sent by the *event source* and what they represent: | Payload | Sequence #| Type | From User Id | To User Id | |---------------|-----------|--------------|--------------|------------| |666\|F\|60\|50 | 666 | Follow | 60 | 50 | |1\|U\|12\|9 | 1 | Unfollow | 12 | 9 | |542532\|B | 542532 | Broadcast | - | - | |43\|P\|32\|56 | 43 | Private Msg | 32 | 56 | |634\|S\|32 | 634 | Status Update| 32 | - | Using the verification program supplied, you will receive exactly 10000000 events, with sequence number from 1 to 10000000. **The events will arrive out of order**. *Note: Please do not assume that your code would only handle a finite sequence of events, **we expect your server to handle an arbitrarily large events stream** (i.e. you would not be able to keep all events in memory or any other storage)* Events may generate notifications for *user clients*. **If there is a *user client* ** connected for them, these are the users to be informed for different event types: * **Follow**: Only the `To User Id` should be notified * **Unfollow**: No clients should be notified * **Broadcast**: All connected *user clients* should be notified * **Private Message**: Only the `To User Id` should be notified * **Status Update**: All current followers of the `From User ID` should be notified If there are no *user client* connected for a user, any notifications for them must be silently ignored. *user clients* expect to be notified of events **in the correct order**, regardless of the order in which the *event source* sent them.

h-store icon h-store

H-Store Parallel Main Memory OLTP Database System

kong icon kong

:monkey: The Microservice API Gateway

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.