2020-08-02 21:42:16 +02:00
<!DOCTYPE html>
< html lang = "en" >
< head >
< meta charset = "utf-8" >
< meta http-equiv = "X-UA-Compatible" content = "IE=edge" >
< meta name = "viewport" content = "width=device-width, initial-scale=1.0" >
< link rel = "shortcut icon" href = "../img/favicon.ico" >
< title > Performance - IXWebSocket< / title >
< link href = "../css/bootstrap.min.css" rel = "stylesheet" >
< link href = "../css/font-awesome.min.css" rel = "stylesheet" >
< link href = "../css/base.css" rel = "stylesheet" >
2021-07-27 20:49:00 +02:00
< link rel = "stylesheet" href = "https://cdnjs.cloudflare.com/ajax/libs/highlight.js/10.5.0/styles/github.min.css" >
2020-08-02 21:42:16 +02:00
< script src = "../js/jquery-1.10.2.min.js" defer > < / script >
< script src = "../js/bootstrap.min.js" defer > < / script >
2021-07-27 20:49:00 +02:00
< script src = "https://cdnjs.cloudflare.com/ajax/libs/highlight.js/10.5.0/highlight.min.js" > < / script >
2020-08-02 21:42:16 +02:00
< script > hljs . initHighlightingOnLoad ( ) ; < / script >
< / head >
< body >
< div class = "navbar fixed-top navbar-expand-lg navbar-dark bg-primary" >
< div class = "container" >
< a class = "navbar-brand" href = ".." > IXWebSocket< / a >
<!-- Expander button -->
< button type = "button" class = "navbar-toggler" data-toggle = "collapse" data-target = "#navbar-collapse" >
< span class = "navbar-toggler-icon" > < / span >
< / button >
<!-- Expanded navigation -->
< div id = "navbar-collapse" class = "navbar-collapse collapse" >
<!-- Main navigation -->
< ul class = "nav navbar-nav" >
< li class = "navitem" >
< a href = ".." class = "nav-link" > Home< / a >
< / li >
< li class = "navitem" >
< a href = "../CHANGELOG/" class = "nav-link" > Changelog< / a >
< / li >
< li class = "navitem" >
< a href = "../build/" class = "nav-link" > Build< / a >
< / li >
< li class = "navitem" >
< a href = "../design/" class = "nav-link" > Design< / a >
< / li >
< li class = "navitem" >
< a href = "../packages/" class = "nav-link" > Packages< / a >
< / li >
< li class = "navitem active" >
< a href = "./" class = "nav-link" > Performance< / a >
< / li >
< li class = "navitem" >
< a href = "../usage/" class = "nav-link" > Examples< / a >
< / li >
< li class = "navitem" >
< a href = "../ws/" class = "nav-link" > Ws< / a >
< / li >
< / ul >
< ul class = "nav navbar-nav ml-auto" >
< li class = "nav-item" >
< a href = "#" class = "nav-link" data-toggle = "modal" data-target = "#mkdocs_search_modal" >
< i class = "fa fa-search" > < / i > Search
< / a >
< / li >
< li class = "nav-item" >
< a rel = "prev" href = "../packages/" class = "nav-link" >
< i class = "fa fa-arrow-left" > < / i > Previous
< / a >
< / li >
< li class = "nav-item" >
< a rel = "next" href = "../usage/" class = "nav-link" >
Next < i class = "fa fa-arrow-right" > < / i >
< / a >
< / li >
< / ul >
< / div >
< / div >
< / div >
< div class = "container" >
< div class = "row" >
< div class = "col-md-3" > < div class = "navbar-light navbar-expand-md bs-sidebar hidden-print affix" role = "complementary" >
< div class = "navbar-header" >
< button type = "button" class = "navbar-toggler collapsed" data-toggle = "collapse" data-target = "#toc-collapse" title = "Table of Contents" >
< span class = "fa fa-angle-down" > < / span >
< / button >
< / div >
< div id = "toc-collapse" class = "navbar-collapse collapse card bg-secondary" >
< ul class = "nav flex-column" >
< li class = "nav-item" data-level = "2" > < a href = "#websocket-client-performance" class = "nav-link" > WebSocket Client performance< / a >
< ul class = "nav flex-column" >
< / ul >
< / li >
< / ul >
< / div >
< / div > < / div >
< div class = "col-md-9" role = "main" >
< h2 id = "websocket-client-performance" > WebSocket Client performance< / h2 >
< p > We will run a client and a server on the same machine, connecting to localhost. This bench is run on a MacBook Pro from 2015. We can receive over 200,000 (small) messages per second, another way to put it is that it takes 5 micro-second to receive and process one message. This is an indication about the minimal latency to receive messages.< / p >
< h3 id = "receiving-messages" > Receiving messages< / h3 >
< p > By using the push_server ws sub-command, the server will send the same message in a loop to any connected client.< / p >
< pre > < code > ws push_server -q --send_msg 'yo'
< / code > < / pre >
< p > By using the echo_client ws sub-command, with the -m (mute or no_send), we will display statistics on how many messages we can receive per second.< / p >
< pre > < code > $ ws echo_client -m ws://localhost:8008
[2020-08-02 12:31:17.284] [info] ws_echo_client: connected
[2020-08-02 12:31:17.284] [info] Uri: /
[2020-08-02 12:31:17.284] [info] Headers:
[2020-08-02 12:31:17.284] [info] Connection: Upgrade
[2020-08-02 12:31:17.284] [info] Sec-WebSocket-Accept: byy/pMK2d0PtRwExaaiOnXJTQHo=
[2020-08-02 12:31:17.284] [info] Server: ixwebsocket/10.1.4 macos ssl/SecureTransport zlib 1.2.11
[2020-08-02 12:31:17.284] [info] Upgrade: websocket
[2020-08-02 12:31:17.663] [info] messages received: 0 per second 2595307 total
[2020-08-02 12:31:18.668] [info] messages received: 79679 per second 2674986 total
[2020-08-02 12:31:19.668] [info] messages received: 207438 per second 2882424 total
[2020-08-02 12:31:20.673] [info] messages received: 209207 per second 3091631 total
[2020-08-02 12:31:21.676] [info] messages received: 216056 per second 3307687 total
[2020-08-02 12:31:22.680] [info] messages received: 214927 per second 3522614 total
[2020-08-02 12:31:23.684] [info] messages received: 216960 per second 3739574 total
[2020-08-02 12:31:24.688] [info] messages received: 215232 per second 3954806 total
[2020-08-02 12:31:25.691] [info] messages received: 212300 per second 4167106 total
[2020-08-02 12:31:26.694] [info] messages received: 212501 per second 4379607 total
[2020-08-02 12:31:27.699] [info] messages received: 212330 per second 4591937 total
[2020-08-02 12:31:28.702] [info] messages received: 216511 per second 4808448 total
< / code > < / pre > < / div >
< / div >
< / div >
< footer class = "col-md-12" >
< hr >
< p > Documentation built with < a href = "https://www.mkdocs.org/" > MkDocs< / a > .< / p >
< / footer >
< script >
var base_url = "..",
shortcuts = {"help": 191, "next": 78, "previous": 80, "search": 83};
< / script >
< script src = "../js/base.js" defer > < / script >
< script src = "../search/main.js" defer > < / script >
< div class = "modal" id = "mkdocs_search_modal" tabindex = "-1" role = "dialog" aria-labelledby = "searchModalLabel" aria-hidden = "true" >
< div class = "modal-dialog modal-lg" >
< div class = "modal-content" >
< div class = "modal-header" >
< h4 class = "modal-title" id = "searchModalLabel" > Search< / h4 >
< button type = "button" class = "close" data-dismiss = "modal" > < span aria-hidden = "true" > × < / span > < span class = "sr-only" > Close< / span > < / button >
< / div >
< div class = "modal-body" >
2021-07-27 20:49:00 +02:00
< p > From here you can search these documents. Enter your search terms below.< / p >
2020-08-02 21:42:16 +02:00
< form >
< div class = "form-group" >
< input type = "search" class = "form-control" placeholder = "Search..." id = "mkdocs-search-query" title = "Type search term here" >
< / div >
< / form >
2021-07-27 20:49:00 +02:00
< div id = "mkdocs-search-results" data-no-results-text = "No results found" > < / div >
2020-08-02 21:42:16 +02:00
< / div >
< div class = "modal-footer" >
< / div >
< / div >
< / div >
< / div > < div class = "modal" id = "mkdocs_keyboard_modal" tabindex = "-1" role = "dialog" aria-labelledby = "keyboardModalLabel" aria-hidden = "true" >
< div class = "modal-dialog" >
< div class = "modal-content" >
< div class = "modal-header" >
< h4 class = "modal-title" id = "keyboardModalLabel" > Keyboard Shortcuts< / h4 >
< button type = "button" class = "close" data-dismiss = "modal" > < span aria-hidden = "true" > × < / span > < span class = "sr-only" > Close< / span > < / button >
< / div >
< div class = "modal-body" >
< table class = "table" >
< thead >
< tr >
< th style = "width: 20%;" > Keys< / th >
< th > Action< / th >
< / tr >
< / thead >
< tbody >
< tr >
< td class = "help shortcut" > < kbd > ?< / kbd > < / td >
< td > Open this help< / td >
< / tr >
< tr >
< td class = "next shortcut" > < kbd > n< / kbd > < / td >
< td > Next page< / td >
< / tr >
< tr >
< td class = "prev shortcut" > < kbd > p< / kbd > < / td >
< td > Previous page< / td >
< / tr >
< tr >
< td class = "search shortcut" > < kbd > s< / kbd > < / td >
< td > Search< / td >
< / tr >
< / tbody >
< / table >
< / div >
< div class = "modal-footer" >
< / div >
< / div >
< / div >
< / div >
< / body >
< / html >