Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Channelstream is a websocket communication server for web applications

License

NotificationsYou must be signed in to change notification settings

Channelstream/channelstream

Repository files navigation

Build Status

This is a websocket-based real-time communication server,your applications communicate with it via simple JSON REST API.

Visithttp://channelstream.org for more information.

Installation and Setup

Use from docker:

docker pull channelstream/channelstream:latestdocker run --rm -p 8000:8000 -e CHANNELSTREAM_ALLOW_POSTING_FROM=0.0.0.0 channelstream/channelstream:latest

Direct usage

Obtain source from github and do:

YOUR_PYTHON_ENV/bin/pip install channelstream

Generate new configuration:

YOUR_PYTHON_ENV/bin/channelstream_utils make_config -o config.ini

Start the server:

YOUR_PYTHON_ENV/bin/channelstream -i config.ini

Demos

Demo applications live inhttps://github.com/Channelstream/channelstream_demos repository.

They show common patterns used in real-time applications.

Security and communication model

Channelstream provides API explorer that you can use to interact with variousendpoints, it is available by default underhttp://127.0.0.1:8000/api-explorer.

To send information client interacts only with your normal www application.Your app handled authentication and processing messages from client, then passedthem as signed message to channelstream server for broadcast.

websocket client -> webapp (security and transformation happens here) -> REST call to socket server -> broadcast to other clients

This model is easy to implement, secure, easy to scale and allows all kind oflanguages/apps/work queues to interact with socket server.

All messages need to be signed with a HMAC of destination endpoint ::

import requestsfrom itsdangerous import TimestampSignersigner = TimestampSigner(SERVER_SECRET)sig_for_server = signer.sign('/connect')secret_headers = {'x-channelstream-secret': sig_for_server,                  'Content-Type': 'application/json'}response = requests.post(url, data=json.dumps(payload),                         headers=secret_headers).json()

Data format and endpoints

Please consult API Explorer (http://127.0.0.1:8000/api-explorer) for in depth informationabout endpoints.

Some examples:

  • /connectPOST connects users to the server
  • /subscribePOST Subscribes connection to new channels
  • /unsubscribePOST Removes connection from channels
  • /user_statePOST set the state of specific user
  • /messagePOST Send message to channels and/or users
  • /messageDELETE Delete message from history and emit changes
  • /messagePATCH Edit existing message in history and emit changes
  • /channel_configPOST Set channel configuration
  • /infoPOST Returns channel information

Client API

  • /wsGET Handles websocket connections
  • /listenGET Handles long polling connections
  • /disconnectGET Permanently remove connection from server
  • /disconnectPOST Permanently remove connection from server

Admin API

  • /admin/admin.jsonGET Return server information in json format for admin panel purposes
  • /admin/admin.jsonPOST Return server information in json format for admin panel purposes

Responses to js client

Responses to client are in form oflist containingobjects:

examples:

new message ::

{"date": "2011-09-15T11:36:18.471862","message": MSG_PAYLOAD,"type": "message","user": "NAME_OF_POSTER","channel": "CHAN_NAME"}

presence info ::

{"date": "2011-09-15T11:43:47.434905","message": {"action":"joined/parted"},"type": "presence","user": "NAME_OF_POSTER","channel": "CHAN_NAME"}

Currently following message types are emited:message,message:edit,message:delete,presence,user_state_change.

Packages

No packages published

Contributors3

  •  
  •  
  •  

[8]ページ先頭

©2009-2025 Movatter.jp