Giter VIP home page Giter VIP logo

websock's Introduction

WebSock

Build Status Docs Hex.pm

WebSock is a specification for apps to service WebSocket connections; you can think of it as 'Plug for WebSockets'. WebSock abstracts WebSocket support from servers such as Bandit or Cowboy and exposes a generic WebSocket API to applications. WebSocket-aware applications such as Phoenix can then be hosted within a supported web server simply by defining conformance to the WebSock behaviour, in the same manner as how Plug conformance allows their HTTP aspects to be hosted within an arbitrary web server.

This package defines the WebSock behaviour which describes the functions that an application such as Phoenix must implement in order to be WebSock compliant; it is roughly the equivalent of the Plug interface, but for WebSocket connections. It is commonly used in conjunction with the websock_adapter package which defines concrete adapters on top of Bandit and Cowboy; the two packages are separate to allow for servers which directly expose WebSock support to depend on just the behaviour. Users will almost always want to depend on websock_adapter instead of this package.

WebSocket Lifecycle

WebSocket connections go through a well defined lifecycle mediated by WebSock and WebSock.Adapters:

  • This step is outside the scope of the WebSock API. A client will attempt to Upgrade an HTTP connection to a WebSocket connection by passing a specific set of headers in an HTTP request. An application may choose to determine the feasibility of such an upgrade request however it pleases
  • An application will then signal an upgrade to be performed by calling WebSockAdpater.upgrade/4, passing in the Plug.Conn to upgrade, along with the WebSock compliant handler module which will handle the connection once it is upgraded
  • The underlying server will then attempt to upgrade the HTTP connection to a WebSocket connection
  • Assuming the WebSocket connection is successfully negotiated, WebSock will call c:WebSock.init/1 on the configured handler to allow the application to perform any necessary tasks now that the WebSocket connection is live
  • WebSock will call the configured handler's c:WebSock.handle_in/2 callback whenever data is received from the client
  • WebSock will call the configured handler's c:WebSock.handle_info/2 callback whenever other processes send messages to the handler process
  • The WebSock implementation can send data to the client by returning a {:push,...} tuple from any of the above handle_* callbacks
  • At any time, c:WebSock.terminate/2 (if implemented) may be called to indicate a close, error or timeout condition

For more information, consult the docs.

Installation

The websock package can be installed by adding websock to your list of dependencies in mix.exs:

def deps do
  [
    {:websock, "~> 0.5"}
  ]
end

Documentation can be found at https://hexdocs.pm/websock.

License

MIT

websock's People

Contributors

mtrudel avatar axelson avatar grandafrato avatar dependabot[bot] avatar

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.