2019-11-27 18:10:09 +01: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 > Cobra - IXWebSocket< / title >
< link href = "../css/bootstrap-custom.min.css" rel = "stylesheet" >
< link href = "../css/font-awesome.min.css" rel = "stylesheet" >
< link href = "../css/base.css" rel = "stylesheet" >
< link rel = "stylesheet" href = "https://cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/styles/github.min.css" >
<!-- HTML5 shim and Respond.js IE8 support of HTML5 elements and media queries -->
<!-- [if lt IE 9]>
< script src = "https://oss.maxcdn.com/libs/html5shiv/3.7.0/html5shiv.js" > < / script >
< script src = "https://oss.maxcdn.com/libs/respond.js/1.4.2/respond.min.js" > < / script >
<![endif]-->
< script src = "../js/jquery-1.10.2.min.js" defer > < / script >
< script src = "../js/bootstrap-3.0.3.min.js" defer > < / script >
< script src = "https://cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/highlight.min.js" > < / script >
< script > hljs . initHighlightingOnLoad ( ) ; < / script >
< / head >
< body >
< div class = "navbar navbar-default navbar-fixed-top" role = "navigation" >
< div class = "container" >
<!-- Collapsed navigation -->
< div class = "navbar-header" >
<!-- Expander button -->
< button type = "button" class = "navbar-toggle" data-toggle = "collapse" data-target = ".navbar-collapse" >
< span class = "sr-only" > Toggle navigation< / span >
< span class = "icon-bar" > < / span >
< span class = "icon-bar" > < / span >
< span class = "icon-bar" > < / span >
< / button >
< a class = "navbar-brand" href = ".." > IXWebSocket< / a >
< / div >
<!-- Expanded navigation -->
< div class = "navbar-collapse collapse" >
<!-- Main navigation -->
< ul class = "nav navbar-nav" >
< li >
< a href = ".." > Home< / a >
< / li >
< li >
< a href = "../CHANGELOG/" > Changelog< / a >
< / li >
< li >
< a href = "../build/" > Build< / a >
< / li >
< li class = "active" >
< a href = "./" > Cobra< / a >
< / li >
< li >
< a href = "../design/" > Design< / a >
< / li >
< li >
< a href = "../usage/" > Examples< / a >
< / li >
< li >
< a href = "../ws/" > Ws< / a >
< / li >
< / ul >
< ul class = "nav navbar-nav navbar-right" >
< li >
< a href = "#" data-toggle = "modal" data-target = "#mkdocs_search_modal" >
< i class = "fa fa-search" > < / i > Search
< / a >
< / li >
< li >
< a rel = "next" href = "../build/" >
< i class = "fa fa-arrow-left" > < / i > Previous
< / a >
< / li >
< li >
< a rel = "prev" href = "../design/" >
Next < i class = "fa fa-arrow-right" > < / i >
< / a >
< / li >
< / ul >
< / div >
< / div >
< / div >
< div class = "container" >
< div class = "col-md-3" > < div class = "bs-sidebar hidden-print affix well" role = "complementary" >
< ul class = "nav bs-sidenav" >
< li class = "main active" > < a href = "#general" > General< / a > < / li >
< li > < a href = "#server" > Server< / a > < / li >
< li > < a href = "#publisher" > Publisher< / a > < / li >
< li > < a href = "#subscriber" > Subscriber< / a > < / li >
< / ul >
< / div > < / div >
< div class = "col-md-9" role = "main" >
< h2 id = "general" > General< / h2 >
2019-11-27 18:28:23 +01:00
< 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 >
2019-11-27 18:10:09 +01:00
< 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 >
2019-12-03 18:28:36 +01:00
< pre > < code class = "bash" > $ cd < ixwebsocket-top-level-folder> /ixsnake/ixsnake
2019-11-27 18:10:09 +01:00
$ 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 >
2019-12-03 18:28:36 +01:00
< pre > < code class = "bash" > $ cd < ixwebsocket-top-level-folder> /ws
2019-11-27 18:25:07 +01:00
$ ws cobra_publish --appkey FC2F10139A2BAc53BB72D9db967b024f --endpoint ws://127.0.0.1:8008 --rolename _pub --rolesecret 1c04DB8fFe76A4EeFE3E318C72d771db test_channel cobraMetricsSample.json
2019-11-27 18:10:09 +01:00
[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 >
2019-12-03 18:28:36 +01:00
< pre > < code class = "bash" > $ ws cobra_subscribe --appkey FC2F10139A2BAc53BB72D9db967b024f --endpoint ws://127.0.0.1:8008 --rolename _pub --rolesecret 1c04DB8fFe76A4EeFE3E318C72d771db test_channel
2019-11-27 18:10:09 +01:00
#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 > < / 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 = "Search Modal" aria-hidden = "true" >
< div class = "modal-dialog" >
< div class = "modal-content" >
< div class = "modal-header" >
< button type = "button" class = "close" data-dismiss = "modal" > < span aria-hidden = "true" > × < / span > < span class = "sr-only" > Close< / span > < / button >
< h4 class = "modal-title" id = "exampleModalLabel" > Search< / h4 >
< / div >
< div class = "modal-body" >
< p >
From here you can search these documents. Enter
your search terms below.
< / p >
< form role = "form" >
< div class = "form-group" >
< input type = "text" class = "form-control" placeholder = "Search..." id = "mkdocs-search-query" title = "Type search term here" >
< / div >
< / form >
< div id = "mkdocs-search-results" > < / div >
< / div >
< div class = "modal-footer" >
< / div >
< / div >
< / div >
< / div > < div class = "modal" id = "mkdocs_keyboard_modal" tabindex = "-1" role = "dialog" aria-labelledby = "Keyboard Shortcuts Modal" aria-hidden = "true" >
< div class = "modal-dialog" >
< div class = "modal-content" >
< div class = "modal-header" >
< button type = "button" class = "close" data-dismiss = "modal" > < span aria-hidden = "true" > × < / span > < span class = "sr-only" > Close< / span > < / button >
< h4 class = "modal-title" id = "exampleModalLabel" > Keyboard Shortcuts< / h4 >
< / 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 >