Repository files navigation

Websocket Server

CircleCI

A minimal Websockets Server in Python with no external dependencies.

  • Python2 and Python3 support
  • Clean simple API
  • Multiple clients
  • No dependencies

Notice that this implementation does not support the more advanced features like SSL etc. The project is focused mainly on making it easy to run a websocket server for prototyping, testing or for making a GUI for your application.

Installation

You can use the project in three ways.

  1. Copy/paste the websocket_server.py file in your project and use it directly
  2. pip install git+https://github.com/Pithikos/python-websocket-server (latest code)
  3. pip install websocket-server (might not be up-to-date)

For coding details have a look at the server.py example and the API.

Usage

You can get a feel of how to use the websocket server by running

python server.py

Then just open client.html in your browser and you should be able to send and receive messages.

Testing

Run all tests

tox

API

The API is simply methods and properties of the WebsocketServer class.

WebsocketServer

The WebsocketServer can be initialized with the below parameters.

port - The port clients will need to connect to.

host - By default the 127.0.0.1 is used which allows connections only from the current machine. If you wish to allow all network machines to connect, you need to pass 0.0.0.0 as hostname.

loglevel - logging level to print. By default WARNING is used. You can use logging.DEBUG or logging.INFO for more verbose output.

Properties

PropertyDescription
clientsA list of client

Methods

MethodDescriptionTakesGives
set_fn_new_client()Sets a callback function that will be called for every new client connecting to usfunctionNone
set_fn_client_left()Sets a callback function that will be called for every client disconnecting from usfunctionNone
set_fn_message_received()Sets a callback function that will be called when a client sends a messagefunctionNone
send_message()Sends a message to a specific client. The message is a simple string.client, messageNone
send_message_to_all()Sends a message to all connected clients. The message is a simple string.messageNone

Callback functions

Set byDescriptionParameters
set_fn_new_client()Called for every new client connecting to usclient, server
set_fn_client_left()Called for every client disconnecting from usclient, server
set_fn_message_received()Called when a client sends a messageclient, server, message

The client passed to the callback is the client that left, sent the message, etc. The server might not have any use to use. However it is passed in case you want to send messages to clients.

Example:

importloggingfromwebsocket_serverimportWebsocketServerdefnew_client(client, server):
server.send_message_to_all("Hey all, a new client has joined us")
server=WebsocketServer(13254, host='127.0.0.1', loglevel=logging.INFO)
server.set_fn_new_client(new_client)
server.run_forever()

Client

Client is just a dictionary passed along methods.

{
'id' : client_id,
'handler' : client_handler,
'address' : (addr, port)
}

About

A simple fully working websocket-server in Python with no external dependencies

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Repository files navigation

Websocket Server

CircleCI

A minimal Websockets Server in Python with no external dependencies.

  • Python2 and Python3 support
  • Clean simple API
  • Multiple clients
  • No dependencies

Notice that this implementation does not support the more advanced features like SSL etc. The project is focused mainly on making it easy to run a websocket server for prototyping, testing or for making a GUI for your application.

Installation

You can use the project in three ways.

  1. Copy/paste the websocket_server.py file in your project and use it directly
  2. pip install git+https://github.com/Pithikos/python-websocket-server (latest code)
  3. pip install websocket-server (might not be up-to-date)

For coding details have a look at the server.py example and the API.

Usage

You can get a feel of how to use the websocket server by running

python server.py

Then just open client.html in your browser and you should be able to send and receive messages.

Testing

Run all tests

tox

API

The API is simply methods and properties of the WebsocketServer class.

WebsocketServer

The WebsocketServer can be initialized with the below parameters.

port - The port clients will need to connect to.

host - By default the 127.0.0.1 is used which allows connections only from the current machine. If you wish to allow all network machines to connect, you need to pass 0.0.0.0 as hostname.

loglevel - logging level to print. By default WARNING is used. You can use logging.DEBUG or logging.INFO for more verbose output.

Properties

PropertyDescription
clientsA list of client

Methods

MethodDescriptionTakesGives
set_fn_new_client()Sets a callback function that will be called for every new client connecting to usfunctionNone
set_fn_client_left()Sets a callback function that will be called for every client disconnecting from usfunctionNone
set_fn_message_received()Sets a callback function that will be called when a client sends a messagefunctionNone
send_message()Sends a message to a specific client. The message is a simple string.client, messageNone
send_message_to_all()Sends a message to all connected clients. The message is a simple string.messageNone

Callback functions

Set byDescriptionParameters
set_fn_new_client()Called for every new client connecting to usclient, server
set_fn_client_left()Called for every client disconnecting from usclient, server
set_fn_message_received()Called when a client sends a messageclient, server, message

The client passed to the callback is the client that left, sent the message, etc. The server might not have any use to use. However it is passed in case you want to send messages to clients.

Example:

importloggingfromwebsocket_serverimportWebsocketServerdefnew_client(client, server):
server.send_message_to_all("Hey all, a new client has joined us")
server=WebsocketServer(13254, host='127.0.0.1', loglevel=logging.INFO)
server.set_fn_new_client(new_client)
server.run_forever()

Client

Client is just a dictionary passed along methods.

{
'id' : client_id,
'handler' : client_handler,
'address' : (addr, port)
}

About

A simple fully working websocket-server in Python with no external dependencies

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Websocket Server

CircleCI

A minimal Websockets Server in Python with no external dependencies.

  • Python2 and Python3 support
  • Clean simple API
  • Multiple clients
  • No dependencies

Notice that this implementation does not support the more advanced features like SSL etc. The project is focused mainly on making it easy to run a websocket server for prototyping, testing or for making a GUI for your application.

Installation

You can use the project in three ways.

  1. Copy/paste the websocket_server.py file in your project and use it directly
  2. pip install git+https://github.com/Pithikos/python-websocket-server (latest code)
  3. pip install websocket-server (might not be up-to-date)

For coding details have a look at the server.py example and the API.

Usage

You can get a feel of how to use the websocket server by running

python server.py

Then just open client.html in your browser and you should be able to send and receive messages.

Testing

Run all tests

tox

API

The API is simply methods and properties of the WebsocketServer class.

WebsocketServer

The WebsocketServer can be initialized with the below parameters.

port - The port clients will need to connect to.

host - By default the 127.0.0.1 is used which allows connections only from the current machine. If you wish to allow all network machines to connect, you need to pass 0.0.0.0 as hostname.

loglevel - logging level to print. By default WARNING is used. You can use logging.DEBUG or logging.INFO for more verbose output.

Properties

PropertyDescription
clientsA list of client

Methods

MethodDescriptionTakesGives
set_fn_new_client()Sets a callback function that will be called for every new client connecting to usfunctionNone
set_fn_client_left()Sets a callback function that will be called for every client disconnecting from usfunctionNone
set_fn_message_received()Sets a callback function that will be called when a client sends a messagefunctionNone
send_message()Sends a message to a specific client. The message is a simple string.client, messageNone
send_message_to_all()Sends a message to all connected clients. The message is a simple string.messageNone

Callback functions

Set byDescriptionParameters
set_fn_new_client()Called for every new client connecting to usclient, server
set_fn_client_left()Called for every client disconnecting from usclient, server
set_fn_message_received()Called when a client sends a messageclient, server, message

The client passed to the callback is the client that left, sent the message, etc. The server might not have any use to use. However it is passed in case you want to send messages to clients.

Example:

importloggingfromwebsocket_serverimportWebsocketServerdefnew_client(client, server):
server.send_message_to_all("Hey all, a new client has joined us")
server=WebsocketServer(13254, host='127.0.0.1', loglevel=logging.INFO)
server.set_fn_new_client(new_client)
server.run_forever()

Client

Client is just a dictionary passed along methods.

{
'id' : client_id,
'handler' : client_handler,
'address' : (addr, port)
}

About

A simple fully working websocket-server in Python with no external dependencies

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Websocket Server

CircleCI

A minimal Websockets Server in Python with no external dependencies.

  • Python2 and Python3 support
  • Clean simple API
  • Multiple clients
  • No dependencies

Notice that this implementation does not support the more advanced features like SSL etc. The project is focused mainly on making it easy to run a websocket server for prototyping, testing or for making a GUI for your application.

Installation

You can use the project in three ways.

  1. Copy/paste the websocket_server.py file in your project and use it directly
  2. pip install git+https://github.com/Pithikos/python-websocket-server (latest code)
  3. pip install websocket-server (might not be up-to-date)

For coding details have a look at the server.py example and the API.

Usage

You can get a feel of how to use the websocket server by running

python server.py

Then just open client.html in your browser and you should be able to send and receive messages.

Testing

Run all tests

tox

API

The API is simply methods and properties of the WebsocketServer class.

WebsocketServer

The WebsocketServer can be initialized with the below parameters.

port - The port clients will need to connect to.

host - By default the 127.0.0.1 is used which allows connections only from the current machine. If you wish to allow all network machines to connect, you need to pass 0.0.0.0 as hostname.

loglevel - logging level to print. By default WARNING is used. You can use logging.DEBUG or logging.INFO for more verbose output.

Properties

PropertyDescription
clientsA list of client

Methods

MethodDescriptionTakesGives
set_fn_new_client()Sets a callback function that will be called for every new client connecting to usfunctionNone
set_fn_client_left()Sets a callback function that will be called for every client disconnecting from usfunctionNone
set_fn_message_received()Sets a callback function that will be called when a client sends a messagefunctionNone
send_message()Sends a message to a specific client. The message is a simple string.client, messageNone
send_message_to_all()Sends a message to all connected clients. The message is a simple string.messageNone

Callback functions

Set byDescriptionParameters
set_fn_new_client()Called for every new client connecting to usclient, server
set_fn_client_left()Called for every client disconnecting from usclient, server
set_fn_message_received()Called when a client sends a messageclient, server, message

The client passed to the callback is the client that left, sent the message, etc. The server might not have any use to use. However it is passed in case you want to send messages to clients.

Example:

importloggingfromwebsocket_serverimportWebsocketServerdefnew_client(client, server):
server.send_message_to_all("Hey all, a new client has joined us")
server=WebsocketServer(13254, host='127.0.0.1', loglevel=logging.INFO)
server.set_fn_new_client(new_client)
server.run_forever()

Client

Client is just a dictionary passed along methods.

{
'id' : client_id,
'handler' : client_handler,
'address' : (addr, port)
}

About

A simple fully working websocket-server in Python with no external dependencies

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Repository files navigation

Websocket Server

CircleCI

A minimal Websockets Server in Python with no external dependencies.

  • Python2 and Python3 support
  • Clean simple API
  • Multiple clients
  • No dependencies

Notice that this implementation does not support the more advanced features like SSL etc. The project is focused mainly on making it easy to run a websocket server for prototyping, testing or for making a GUI for your application.

Installation

You can use the project in three ways.

  1. Copy/paste the websocket_server.py file in your project and use it directly
  2. pip install git+https://github.com/Pithikos/python-websocket-server (latest code)
  3. pip install websocket-server (might not be up-to-date)

For coding details have a look at the server.py example and the API.

Usage

You can get a feel of how to use the websocket server by running

python server.py

Then just open client.html in your browser and you should be able to send and receive messages.

Testing

Run all tests

tox

API

The API is simply methods and properties of the WebsocketServer class.

WebsocketServer

The WebsocketServer can be initialized with the below parameters.

port - The port clients will need to connect to.

host - By default the 127.0.0.1 is used which allows connections only from the current machine. If you wish to allow all network machines to connect, you need to pass 0.0.0.0 as hostname.

loglevel - logging level to print. By default WARNING is used. You can use logging.DEBUG or logging.INFO for more verbose output.

Properties

PropertyDescription
clientsA list of client

Methods

MethodDescriptionTakesGives
set_fn_new_client()Sets a callback function that will be called for every new client connecting to usfunctionNone
set_fn_client_left()Sets a callback function that will be called for every client disconnecting from usfunctionNone
set_fn_message_received()Sets a callback function that will be called when a client sends a messagefunctionNone
send_message()Sends a message to a specific client. The message is a simple string.client, messageNone
send_message_to_all()Sends a message to all connected clients. The message is a simple string.messageNone

Callback functions

Set byDescriptionParameters
set_fn_new_client()Called for every new client connecting to usclient, server
set_fn_client_left()Called for every client disconnecting from usclient, server
set_fn_message_received()Called when a client sends a messageclient, server, message

The client passed to the callback is the client that left, sent the message, etc. The server might not have any use to use. However it is passed in case you want to send messages to clients.

Example:

importloggingfromwebsocket_serverimportWebsocketServerdefnew_client(client, server):
server.send_message_to_all("Hey all, a new client has joined us")
server=WebsocketServer(13254, host='127.0.0.1', loglevel=logging.INFO)
server.set_fn_new_client(new_client)
server.run_forever()

Client

Client is just a dictionary passed along methods.

{
'id' : client_id,
'handler' : client_handler,
'address' : (addr, port)
}

About

A simple fully working websocket-server in Python with no external dependencies

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Websocket Server

CircleCI

A minimal Websockets Server in Python with no external dependencies.

  • Python2 and Python3 support
  • Clean simple API
  • Multiple clients
  • No dependencies

Notice that this implementation does not support the more advanced features like SSL etc. The project is focused mainly on making it easy to run a websocket server for prototyping, testing or for making a GUI for your application.

Installation

You can use the project in three ways.

  1. Copy/paste the websocket_server.py file in your project and use it directly
  2. pip install git+https://github.com/Pithikos/python-websocket-server (latest code)
  3. pip install websocket-server (might not be up-to-date)

For coding details have a look at the server.py example and the API.

Usage

You can get a feel of how to use the websocket server by running

python server.py

Then just open client.html in your browser and you should be able to send and receive messages.

Testing

Run all tests

tox

API

The API is simply methods and properties of the WebsocketServer class.

WebsocketServer

The WebsocketServer can be initialized with the below parameters.

port - The port clients will need to connect to.

host - By default the 127.0.0.1 is used which allows connections only from the current machine. If you wish to allow all network machines to connect, you need to pass 0.0.0.0 as hostname.

loglevel - logging level to print. By default WARNING is used. You can use logging.DEBUG or logging.INFO for more verbose output.

Properties

PropertyDescription
clientsA list of client

Methods

MethodDescriptionTakesGives
set_fn_new_client()Sets a callback function that will be called for every new client connecting to usfunctionNone
set_fn_client_left()Sets a callback function that will be called for every client disconnecting from usfunctionNone
set_fn_message_received()Sets a callback function that will be called when a client sends a messagefunctionNone
send_message()Sends a message to a specific client. The message is a simple string.client, messageNone
send_message_to_all()Sends a message to all connected clients. The message is a simple string.messageNone

Callback functions

Set byDescriptionParameters
set_fn_new_client()Called for every new client connecting to usclient, server
set_fn_client_left()Called for every client disconnecting from usclient, server
set_fn_message_received()Called when a client sends a messageclient, server, message

The client passed to the callback is the client that left, sent the message, etc. The server might not have any use to use. However it is passed in case you want to send messages to clients.

Example:

importloggingfromwebsocket_serverimportWebsocketServerdefnew_client(client, server):
server.send_message_to_all("Hey all, a new client has joined us")
server=WebsocketServer(13254, host='127.0.0.1', loglevel=logging.INFO)
server.set_fn_new_client(new_client)
server.run_forever()

Client

Client is just a dictionary passed along methods.

{
'id' : client_id,
'handler' : client_handler,
'address' : (addr, port)
}

About

A simple fully working websocket-server in Python with no external dependencies

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Websocket Server

CircleCI

A minimal Websockets Server in Python with no external dependencies.

  • Python2 and Python3 support
  • Clean simple API
  • Multiple clients
  • No dependencies

Notice that this implementation does not support the more advanced features like SSL etc. The project is focused mainly on making it easy to run a websocket server for prototyping, testing or for making a GUI for your application.

Installation

You can use the project in three ways.

  1. Copy/paste the websocket_server.py file in your project and use it directly
  2. pip install git+https://github.com/Pithikos/python-websocket-server (latest code)
  3. pip install websocket-server (might not be up-to-date)

For coding details have a look at the server.py example and the API.

Usage

You can get a feel of how to use the websocket server by running

python server.py

Then just open client.html in your browser and you should be able to send and receive messages.

Testing

Run all tests

tox

API

The API is simply methods and properties of the WebsocketServer class.

WebsocketServer

The WebsocketServer can be initialized with the below parameters.

port - The port clients will need to connect to.

host - By default the 127.0.0.1 is used which allows connections only from the current machine. If you wish to allow all network machines to connect, you need to pass 0.0.0.0 as hostname.

loglevel - logging level to print. By default WARNING is used. You can use logging.DEBUG or logging.INFO for more verbose output.

Properties

PropertyDescription
clientsA list of client

Methods

MethodDescriptionTakesGives
set_fn_new_client()Sets a callback function that will be called for every new client connecting to usfunctionNone
set_fn_client_left()Sets a callback function that will be called for every client disconnecting from usfunctionNone
set_fn_message_received()Sets a callback function that will be called when a client sends a messagefunctionNone
send_message()Sends a message to a specific client. The message is a simple string.client, messageNone
send_message_to_all()Sends a message to all connected clients. The message is a simple string.messageNone

Callback functions

Set byDescriptionParameters
set_fn_new_client()Called for every new client connecting to usclient, server
set_fn_client_left()Called for every client disconnecting from usclient, server
set_fn_message_received()Called when a client sends a messageclient, server, message

The client passed to the callback is the client that left, sent the message, etc. The server might not have any use to use. However it is passed in case you want to send messages to clients.

Example:

importloggingfromwebsocket_serverimportWebsocketServerdefnew_client(client, server):
server.send_message_to_all("Hey all, a new client has joined us")
server=WebsocketServer(13254, host='127.0.0.1', loglevel=logging.INFO)
server.set_fn_new_client(new_client)
server.run_forever()

Client

Client is just a dictionary passed along methods.

{
'id' : client_id,
'handler' : client_handler,
'address' : (addr, port)
}

About

A simple fully working websocket-server in Python with no external dependencies

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Repository files navigation

Websocket Server

CircleCI

A minimal Websockets Server in Python with no external dependencies.

  • Python2 and Python3 support
  • Clean simple API
  • Multiple clients
  • No dependencies

Notice that this implementation does not support the more advanced features like SSL etc. The project is focused mainly on making it easy to run a websocket server for prototyping, testing or for making a GUI for your application.

Installation

You can use the project in three ways.

  1. Copy/paste the websocket_server.py file in your project and use it directly
  2. pip install git+https://github.com/Pithikos/python-websocket-server (latest code)
  3. pip install websocket-server (might not be up-to-date)

For coding details have a look at the server.py example and the API.

Usage

You can get a feel of how to use the websocket server by running

python server.py

Then just open client.html in your browser and you should be able to send and receive messages.

Testing

Run all tests

tox

API

The API is simply methods and properties of the WebsocketServer class.

WebsocketServer

The WebsocketServer can be initialized with the below parameters.

port - The port clients will need to connect to.

host - By default the 127.0.0.1 is used which allows connections only from the current machine. If you wish to allow all network machines to connect, you need to pass 0.0.0.0 as hostname.

loglevel - logging level to print. By default WARNING is used. You can use logging.DEBUG or logging.INFO for more verbose output.

Properties

PropertyDescription
clientsA list of client

Methods

MethodDescriptionTakesGives
set_fn_new_client()Sets a callback function that will be called for every new client connecting to usfunctionNone
set_fn_client_left()Sets a callback function that will be called for every client disconnecting from usfunctionNone
set_fn_message_received()Sets a callback function that will be called when a client sends a messagefunctionNone
send_message()Sends a message to a specific client. The message is a simple string.client, messageNone
send_message_to_all()Sends a message to all connected clients. The message is a simple string.messageNone

Callback functions

Set byDescriptionParameters
set_fn_new_client()Called for every new client connecting to usclient, server
set_fn_client_left()Called for every client disconnecting from usclient, server
set_fn_message_received()Called when a client sends a messageclient, server, message

The client passed to the callback is the client that left, sent the message, etc. The server might not have any use to use. However it is passed in case you want to send messages to clients.

Example:

importloggingfromwebsocket_serverimportWebsocketServerdefnew_client(client, server):
server.send_message_to_all("Hey all, a new client has joined us")
server=WebsocketServer(13254, host='127.0.0.1', loglevel=logging.INFO)
server.set_fn_new_client(new_client)
server.run_forever()

Client

Client is just a dictionary passed along methods.

{
'id' : client_id,
'handler' : client_handler,
'address' : (addr, port)
}

About

A simple fully working websocket-server in Python with no external dependencies

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages