542 lines
		
	
	
		
			14 KiB
		
	
	
	
		
			HTML
		
	
	
	
	
	
			
		
		
	
	
			542 lines
		
	
	
		
			14 KiB
		
	
	
	
		
			HTML
		
	
	
	
	
	
| 
 | |
| 
 | |
| 
 | |
| 
 | |
| <!doctype html>
 | |
| <html lang="en" class="no-js">
 | |
|   <head>
 | |
|     
 | |
|       <meta charset="utf-8">
 | |
|       <meta name="viewport" content="width=device-width,initial-scale=1">
 | |
|       <meta http-equiv="x-ua-compatible" content="ie=edge">
 | |
|       
 | |
|       
 | |
|       
 | |
|       
 | |
|         <meta name="lang:clipboard.copy" content="Copy to clipboard">
 | |
|       
 | |
|         <meta name="lang:clipboard.copied" content="Copied to clipboard">
 | |
|       
 | |
|         <meta name="lang:search.language" content="en">
 | |
|       
 | |
|         <meta name="lang:search.pipeline.stopwords" content="True">
 | |
|       
 | |
|         <meta name="lang:search.pipeline.trimmer" content="True">
 | |
|       
 | |
|         <meta name="lang:search.result.none" content="No matching documents">
 | |
|       
 | |
|         <meta name="lang:search.result.one" content="1 matching document">
 | |
|       
 | |
|         <meta name="lang:search.result.other" content="# matching documents">
 | |
|       
 | |
|         <meta name="lang:search.tokenizer" content="[\s\-]+">
 | |
|       
 | |
|       <link rel="shortcut icon" href="../assets/images/favicon.png">
 | |
|       <meta name="generator" content="mkdocs-1.1, mkdocs-material-4.6.3">
 | |
|     
 | |
|     
 | |
|       
 | |
|         <title>Cobra - IXWebSocket</title>
 | |
|       
 | |
|     
 | |
|     
 | |
|       <link rel="stylesheet" href="../assets/stylesheets/application.adb8469c.css">
 | |
|       
 | |
|       
 | |
|     
 | |
|     
 | |
|       <script src="../assets/javascripts/modernizr.86422ebf.js"></script>
 | |
|     
 | |
|     
 | |
|       
 | |
|         <link href="https://fonts.gstatic.com" rel="preconnect" crossorigin>
 | |
|         <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:300,400,400i,700%7CRoboto+Mono&display=fallback">
 | |
|         <style>body,input{font-family:"Roboto","Helvetica Neue",Helvetica,Arial,sans-serif}code,kbd,pre{font-family:"Roboto Mono","Courier New",Courier,monospace}</style>
 | |
|       
 | |
|     
 | |
|     <link rel="stylesheet" href="../assets/fonts/material-icons.css">
 | |
|     
 | |
|     
 | |
|     
 | |
|       
 | |
|     
 | |
|     
 | |
|   </head>
 | |
|   
 | |
|     <body dir="ltr">
 | |
|   
 | |
|     <svg class="md-svg">
 | |
|       <defs>
 | |
|         
 | |
|         
 | |
|       </defs>
 | |
|     </svg>
 | |
|     <input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off">
 | |
|     <input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off">
 | |
|     <label class="md-overlay" data-md-component="overlay" for="__drawer"></label>
 | |
|     
 | |
|       <a href="#general" tabindex="0" class="md-skip">
 | |
|         Skip to content
 | |
|       </a>
 | |
|     
 | |
|     
 | |
|       <header class="md-header" data-md-component="header">
 | |
|   <nav class="md-header-nav md-grid">
 | |
|     <div class="md-flex">
 | |
|       <div class="md-flex__cell md-flex__cell--shrink">
 | |
|         <a href=".." title="IXWebSocket" aria-label="IXWebSocket" class="md-header-nav__button md-logo">
 | |
|           
 | |
|             <i class="md-icon"></i>
 | |
|           
 | |
|         </a>
 | |
|       </div>
 | |
|       <div class="md-flex__cell md-flex__cell--shrink">
 | |
|         <label class="md-icon md-icon--menu md-header-nav__button" for="__drawer"></label>
 | |
|       </div>
 | |
|       <div class="md-flex__cell md-flex__cell--stretch">
 | |
|         <div class="md-flex__ellipsis md-header-nav__title" data-md-component="title">
 | |
|           
 | |
|             <span class="md-header-nav__topic">
 | |
|               IXWebSocket
 | |
|             </span>
 | |
|             <span class="md-header-nav__topic">
 | |
|               
 | |
|                 Cobra
 | |
|               
 | |
|             </span>
 | |
|           
 | |
|         </div>
 | |
|       </div>
 | |
|       <div class="md-flex__cell md-flex__cell--shrink">
 | |
|         
 | |
|           <label class="md-icon md-icon--search md-header-nav__button" for="__search"></label>
 | |
|           
 | |
| <div class="md-search" data-md-component="search" role="dialog">
 | |
|   <label class="md-search__overlay" for="__search"></label>
 | |
|   <div class="md-search__inner" role="search">
 | |
|     <form class="md-search__form" name="search">
 | |
|       <input type="text" class="md-search__input" aria-label="search" name="query" placeholder="Search" autocapitalize="off" autocorrect="off" autocomplete="off" spellcheck="false" data-md-component="query" data-md-state="active">
 | |
|       <label class="md-icon md-search__icon" for="__search"></label>
 | |
|       <button type="reset" class="md-icon md-search__icon" data-md-component="reset" tabindex="-1">
 | |
|         
 | |
|       </button>
 | |
|     </form>
 | |
|     <div class="md-search__output">
 | |
|       <div class="md-search__scrollwrap" data-md-scrollfix>
 | |
|         <div class="md-search-result" data-md-component="result">
 | |
|           <div class="md-search-result__meta">
 | |
|             Type to start searching
 | |
|           </div>
 | |
|           <ol class="md-search-result__list"></ol>
 | |
|         </div>
 | |
|       </div>
 | |
|     </div>
 | |
|   </div>
 | |
| </div>
 | |
|         
 | |
|       </div>
 | |
|       
 | |
|     </div>
 | |
|   </nav>
 | |
| </header>
 | |
|     
 | |
|     <div class="md-container">
 | |
|       
 | |
|         
 | |
|       
 | |
|       
 | |
|       <main class="md-main" role="main">
 | |
|         <div class="md-main__inner md-grid" data-md-component="container">
 | |
|           
 | |
|             
 | |
|               <div class="md-sidebar md-sidebar--primary" data-md-component="navigation">
 | |
|                 <div class="md-sidebar__scrollwrap">
 | |
|                   <div class="md-sidebar__inner">
 | |
|                     <nav class="md-nav md-nav--primary" data-md-level="0">
 | |
|   <label class="md-nav__title md-nav__title--site" for="__drawer">
 | |
|     <a href=".." title="IXWebSocket" class="md-nav__button md-logo">
 | |
|       
 | |
|         <i class="md-icon"></i>
 | |
|       
 | |
|     </a>
 | |
|     IXWebSocket
 | |
|   </label>
 | |
|   
 | |
|   <ul class="md-nav__list" data-md-scrollfix>
 | |
|     
 | |
|       
 | |
|       
 | |
|       
 | |
| 
 | |
| 
 | |
|   <li class="md-nav__item">
 | |
|     <a href=".." title="Home" class="md-nav__link">
 | |
|       Home
 | |
|     </a>
 | |
|   </li>
 | |
| 
 | |
|     
 | |
|       
 | |
|       
 | |
|       
 | |
| 
 | |
| 
 | |
|   <li class="md-nav__item">
 | |
|     <a href="../CHANGELOG/" title="Changelog" class="md-nav__link">
 | |
|       Changelog
 | |
|     </a>
 | |
|   </li>
 | |
| 
 | |
|     
 | |
|       
 | |
|       
 | |
|       
 | |
| 
 | |
| 
 | |
|   <li class="md-nav__item">
 | |
|     <a href="../build/" title="Build" class="md-nav__link">
 | |
|       Build
 | |
|     </a>
 | |
|   </li>
 | |
| 
 | |
|     
 | |
|       
 | |
|       
 | |
|       
 | |
| 
 | |
|   
 | |
| 
 | |
| 
 | |
|   <li class="md-nav__item md-nav__item--active">
 | |
|     
 | |
|     <input class="md-toggle md-nav__toggle" data-md-toggle="toc" type="checkbox" id="__toc">
 | |
|     
 | |
|     
 | |
|       <label class="md-nav__link md-nav__link--active" for="__toc">
 | |
|         Cobra
 | |
|       </label>
 | |
|     
 | |
|     <a href="./" title="Cobra" class="md-nav__link md-nav__link--active">
 | |
|       Cobra
 | |
|     </a>
 | |
|     
 | |
|       
 | |
| <nav class="md-nav md-nav--secondary">
 | |
|   
 | |
|   
 | |
|   
 | |
|     <label class="md-nav__title" for="__toc">Table of contents</label>
 | |
|     <ul class="md-nav__list" data-md-scrollfix>
 | |
|       
 | |
|         <li class="md-nav__item">
 | |
|   <a href="#general" class="md-nav__link">
 | |
|     General
 | |
|   </a>
 | |
|   
 | |
|     <nav class="md-nav">
 | |
|       <ul class="md-nav__list">
 | |
|         
 | |
|           <li class="md-nav__item">
 | |
|   <a href="#server" class="md-nav__link">
 | |
|     Server
 | |
|   </a>
 | |
|   
 | |
| </li>
 | |
|         
 | |
|           <li class="md-nav__item">
 | |
|   <a href="#publisher" class="md-nav__link">
 | |
|     Publisher
 | |
|   </a>
 | |
|   
 | |
| </li>
 | |
|         
 | |
|           <li class="md-nav__item">
 | |
|   <a href="#subscriber" class="md-nav__link">
 | |
|     Subscriber
 | |
|   </a>
 | |
|   
 | |
| </li>
 | |
|         
 | |
|       </ul>
 | |
|     </nav>
 | |
|   
 | |
| </li>
 | |
|       
 | |
|       
 | |
|       
 | |
|       
 | |
|       
 | |
|     </ul>
 | |
|   
 | |
| </nav>
 | |
|     
 | |
|   </li>
 | |
| 
 | |
|     
 | |
|       
 | |
|       
 | |
|       
 | |
| 
 | |
| 
 | |
|   <li class="md-nav__item">
 | |
|     <a href="../design/" title="Design" class="md-nav__link">
 | |
|       Design
 | |
|     </a>
 | |
|   </li>
 | |
| 
 | |
|     
 | |
|       
 | |
|       
 | |
|       
 | |
| 
 | |
| 
 | |
|   <li class="md-nav__item">
 | |
|     <a href="../packages/" title="Packages" class="md-nav__link">
 | |
|       Packages
 | |
|     </a>
 | |
|   </li>
 | |
| 
 | |
|     
 | |
|       
 | |
|       
 | |
|       
 | |
| 
 | |
| 
 | |
|   <li class="md-nav__item">
 | |
|     <a href="../usage/" title="Examples" class="md-nav__link">
 | |
|       Examples
 | |
|     </a>
 | |
|   </li>
 | |
| 
 | |
|     
 | |
|       
 | |
|       
 | |
|       
 | |
| 
 | |
| 
 | |
|   <li class="md-nav__item">
 | |
|     <a href="../ws/" title="Ws" class="md-nav__link">
 | |
|       Ws
 | |
|     </a>
 | |
|   </li>
 | |
| 
 | |
|     
 | |
|   </ul>
 | |
| </nav>
 | |
|                   </div>
 | |
|                 </div>
 | |
|               </div>
 | |
|             
 | |
|             
 | |
|               <div class="md-sidebar md-sidebar--secondary" data-md-component="toc">
 | |
|                 <div class="md-sidebar__scrollwrap">
 | |
|                   <div class="md-sidebar__inner">
 | |
|                     
 | |
| <nav class="md-nav md-nav--secondary">
 | |
|   
 | |
|   
 | |
|   
 | |
|     <label class="md-nav__title" for="__toc">Table of contents</label>
 | |
|     <ul class="md-nav__list" data-md-scrollfix>
 | |
|       
 | |
|         <li class="md-nav__item">
 | |
|   <a href="#general" class="md-nav__link">
 | |
|     General
 | |
|   </a>
 | |
|   
 | |
|     <nav class="md-nav">
 | |
|       <ul class="md-nav__list">
 | |
|         
 | |
|           <li class="md-nav__item">
 | |
|   <a href="#server" class="md-nav__link">
 | |
|     Server
 | |
|   </a>
 | |
|   
 | |
| </li>
 | |
|         
 | |
|           <li class="md-nav__item">
 | |
|   <a href="#publisher" class="md-nav__link">
 | |
|     Publisher
 | |
|   </a>
 | |
|   
 | |
| </li>
 | |
|         
 | |
|           <li class="md-nav__item">
 | |
|   <a href="#subscriber" class="md-nav__link">
 | |
|     Subscriber
 | |
|   </a>
 | |
|   
 | |
| </li>
 | |
|         
 | |
|       </ul>
 | |
|     </nav>
 | |
|   
 | |
| </li>
 | |
|       
 | |
|       
 | |
|       
 | |
|       
 | |
|       
 | |
|     </ul>
 | |
|   
 | |
| </nav>
 | |
|                   </div>
 | |
|                 </div>
 | |
|               </div>
 | |
|             
 | |
|           
 | |
|           <div class="md-content">
 | |
|             <article class="md-content__inner md-typeset">
 | |
|               
 | |
|                 
 | |
|                 
 | |
|                   <h1>Cobra</h1>
 | |
|                 
 | |
|                 <h2 id="general">General</h2>
 | |
| <p><a href="https://github.com/machinezone/cobra">cobra</a> is a real time messaging server. The <code>ws</code> utility can run a cobra server (named snake), and has client to publish and subscribe to a cobra server.</p>
 | |
| <p>Bring up 3 terminals and run a server, a publisher and a subscriber in each one. As you publish data you should see it being received by the subscriber. You can run <code>redis-cli MONITOR</code> too to see how redis is being used.</p>
 | |
| <h3 id="server">Server</h3>
 | |
| <p>You will need to have a redis server running locally. To run the server:</p>
 | |
| <pre><code class="bash">$ cd <ixwebsocket-top-level-folder>/ixsnake/ixsnake
 | |
| $ ws snake
 | |
| {
 | |
|   "apps": {
 | |
|     "FC2F10139A2BAc53BB72D9db967b024f": {
 | |
|       "roles": {
 | |
|         "_sub": {
 | |
|           "secret": "66B1dA3ED5fA074EB5AE84Dd8CE3b5ba"
 | |
|         },
 | |
|         "_pub": {
 | |
|           "secret": "1c04DB8fFe76A4EeFE3E318C72d771db"
 | |
|         }
 | |
|       }
 | |
|     }
 | |
|   }
 | |
| }
 | |
| 
 | |
| redis host: 127.0.0.1
 | |
| redis password:
 | |
| redis port: 6379
 | |
| </code></pre>
 | |
| 
 | |
| <h3 id="publisher">Publisher</h3>
 | |
| <pre><code class="bash">$ cd <ixwebsocket-top-level-folder>/ws
 | |
| $ ws cobra_publish --appkey FC2F10139A2BAc53BB72D9db967b024f --endpoint ws://127.0.0.1:8008 --rolename _pub --rolesecret 1c04DB8fFe76A4EeFE3E318C72d771db test_channel cobraMetricsSample.json
 | |
| [2019-11-27 09:06:12.980] [info] Publisher connected
 | |
| [2019-11-27 09:06:12.980] [info] Connection: Upgrade
 | |
| [2019-11-27 09:06:12.980] [info] Sec-WebSocket-Accept: zTtQKMKbvwjdivURplYXwCVUCWM=
 | |
| [2019-11-27 09:06:12.980] [info] Sec-WebSocket-Extensions: permessage-deflate; server_max_window_bits=15; client_max_window_bits=15
 | |
| [2019-11-27 09:06:12.980] [info] Server: ixwebsocket/7.4.0 macos ssl/DarwinSSL zlib 1.2.11
 | |
| [2019-11-27 09:06:12.980] [info] Upgrade: websocket
 | |
| [2019-11-27 09:06:12.982] [info] Publisher authenticated
 | |
| [2019-11-27 09:06:12.982] [info] Published msg 3
 | |
| [2019-11-27 09:06:12.982] [info] Published message id 3 acked
 | |
| </code></pre>
 | |
| 
 | |
| <h3 id="subscriber">Subscriber</h3>
 | |
| <pre><code class="bash">$ ws cobra_subscribe --appkey FC2F10139A2BAc53BB72D9db967b024f --endpoint ws://127.0.0.1:8008 --rolename _pub --rolesecret 1c04DB8fFe76A4EeFE3E318C72d771db test_channel
 | |
| #messages 0 msg/s 0
 | |
| [2019-11-27 09:07:39.341] [info] Subscriber connected
 | |
| [2019-11-27 09:07:39.341] [info] Connection: Upgrade
 | |
| [2019-11-27 09:07:39.341] [info] Sec-WebSocket-Accept: 9vkQWofz49qMCUlTSptCCwHWm+Q=
 | |
| [2019-11-27 09:07:39.341] [info] Sec-WebSocket-Extensions: permessage-deflate; server_max_window_bits=15; client_max_window_bits=15
 | |
| [2019-11-27 09:07:39.341] [info] Server: ixwebsocket/7.4.0 macos ssl/DarwinSSL zlib 1.2.11
 | |
| [2019-11-27 09:07:39.341] [info] Upgrade: websocket
 | |
| [2019-11-27 09:07:39.342] [info] Subscriber authenticated
 | |
| [2019-11-27 09:07:39.345] [info] Subscriber: subscribed to channel test_channel
 | |
| #messages 0 msg/s 0
 | |
| #messages 0 msg/s 0
 | |
| #messages 0 msg/s 0
 | |
| {"baz":123,"foo":"bar"}
 | |
| 
 | |
| #messages 1 msg/s 1
 | |
| #messages 1 msg/s 0
 | |
| #messages 1 msg/s 0
 | |
| {"baz":123,"foo":"bar"}
 | |
| 
 | |
| {"baz":123,"foo":"bar"}
 | |
| 
 | |
| #messages 3 msg/s 2
 | |
| #messages 3 msg/s 0
 | |
| {"baz":123,"foo":"bar"}
 | |
| 
 | |
| #messages 4 msg/s 1
 | |
| ^C
 | |
| </code></pre>
 | |
|                 
 | |
|                   
 | |
|                 
 | |
|                 
 | |
|               
 | |
|               
 | |
|                 
 | |
| 
 | |
| 
 | |
|               
 | |
|             </article>
 | |
|           </div>
 | |
|         </div>
 | |
|       </main>
 | |
|       
 | |
|         
 | |
| <footer class="md-footer">
 | |
|   
 | |
|     <div class="md-footer-nav">
 | |
|       <nav class="md-footer-nav__inner md-grid">
 | |
|         
 | |
|           <a href="../build/" title="Build" class="md-flex md-footer-nav__link md-footer-nav__link--prev" rel="prev">
 | |
|             <div class="md-flex__cell md-flex__cell--shrink">
 | |
|               <i class="md-icon md-icon--arrow-back md-footer-nav__button"></i>
 | |
|             </div>
 | |
|             <div class="md-flex__cell md-flex__cell--stretch md-footer-nav__title">
 | |
|               <span class="md-flex__ellipsis">
 | |
|                 <span class="md-footer-nav__direction">
 | |
|                   Previous
 | |
|                 </span>
 | |
|                 Build
 | |
|               </span>
 | |
|             </div>
 | |
|           </a>
 | |
|         
 | |
|         
 | |
|           <a href="../design/" title="Design" class="md-flex md-footer-nav__link md-footer-nav__link--next" rel="next">
 | |
|             <div class="md-flex__cell md-flex__cell--stretch md-footer-nav__title">
 | |
|               <span class="md-flex__ellipsis">
 | |
|                 <span class="md-footer-nav__direction">
 | |
|                   Next
 | |
|                 </span>
 | |
|                 Design
 | |
|               </span>
 | |
|             </div>
 | |
|             <div class="md-flex__cell md-flex__cell--shrink">
 | |
|               <i class="md-icon md-icon--arrow-forward md-footer-nav__button"></i>
 | |
|             </div>
 | |
|           </a>
 | |
|         
 | |
|       </nav>
 | |
|     </div>
 | |
|   
 | |
|   <div class="md-footer-meta md-typeset">
 | |
|     <div class="md-footer-meta__inner md-grid">
 | |
|       <div class="md-footer-copyright">
 | |
|         
 | |
|         powered by
 | |
|         <a href="https://www.mkdocs.org" target="_blank" rel="noopener">MkDocs</a>
 | |
|         and
 | |
|         <a href="https://squidfunk.github.io/mkdocs-material/" target="_blank" rel="noopener">
 | |
|           Material for MkDocs</a>
 | |
|       </div>
 | |
|       
 | |
|     </div>
 | |
|   </div>
 | |
| </footer>
 | |
|       
 | |
|     </div>
 | |
|     
 | |
|       <script src="../assets/javascripts/application.c33a9706.js"></script>
 | |
|       
 | |
|       <script>app.initialize({version:"1.1",url:{base:".."}})</script>
 | |
|       
 | |
|     
 | |
|   </body>
 | |
| </html> | 
