rev-websocket 0.1.2 → 0.1.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/ChangeLog +5 -0
- data/README.rdoc +6 -0
- data/VERSION +1 -1
- data/examples/README.md +16 -0
- data/examples/echo.rb +1 -1
- data/examples/rpc +26 -0
- data/examples/rpc.rb +47 -0
- data/examples/shoutchat.rb +2 -4
- data/examples/views/rpc.erb +67 -0
- data/lib/rev/websocket.rb +6 -0
- metadata +8 -4
data/ChangeLog
CHANGED
data/README.rdoc
CHANGED
@@ -15,6 +15,12 @@ This library conforms to WebSocket draft-75 and draft-76.
|
|
15
15
|
|
16
16
|
== Examples
|
17
17
|
|
18
|
+
- examples/echo.rb - receives a message from clients and just echos.
|
19
|
+
- examples/shoutchat.rb - simple chat application.
|
20
|
+
- examples/rpc.rb - pushes messages to browsers from programs separated from the web socket server.
|
21
|
+
|
22
|
+
See examples/README.md[http://github.com/frsyuki/rev-websocket/tree/master/examples/] for details.
|
23
|
+
|
18
24
|
=== Simple echo server
|
19
25
|
|
20
26
|
require 'rubygems'
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.1.
|
1
|
+
0.1.3
|
data/examples/README.md
CHANGED
@@ -14,11 +14,27 @@ A HTTP server runs on localhost:8080 and WebSocket server runs on localhost:8081
|
|
14
14
|
Then access to [htt://localhost:8080/echo.html](http://localhost:8080/echo.html).
|
15
15
|
|
16
16
|
|
17
|
+
## RPC push
|
18
|
+
|
19
|
+
With RPC (Remote Procedure Call), you can push messages to browsers from programs separated from the WebSocket server.
|
20
|
+
|
21
|
+
In this example, a Sinatra based web appliction pushes messages using MessagePack-RPC, a simple cross-language RPC library.
|
22
|
+
|
23
|
+
$ gem install msgpack-rpc
|
24
|
+
$ gem install rev-websocket
|
25
|
+
$ gem install sinatra
|
26
|
+
$ gem install json
|
27
|
+
$ ruby ./rpc
|
28
|
+
|
29
|
+
Then access to [htt://localhost:8080/](http://localhost:8080/).
|
30
|
+
|
31
|
+
|
17
32
|
## ShoutChat
|
18
33
|
|
19
34
|
ShoutChat is a simple browser-based chat application.
|
20
35
|
|
21
36
|
$ gem install rev-websocket
|
37
|
+
$ gem install json
|
22
38
|
$ ruby ./shoutchat
|
23
39
|
|
24
40
|
Then access to [htt://localhost:8080/shoutchat.html](http://localhost:8080/shoutchat.html).
|
data/examples/echo.rb
CHANGED
data/examples/rpc
ADDED
@@ -0,0 +1,26 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
fork {
|
4
|
+
load 'rpc.rb'
|
5
|
+
exit 0
|
6
|
+
}
|
7
|
+
|
8
|
+
require 'rubygems'
|
9
|
+
require 'sinatra'
|
10
|
+
require 'msgpack/rpc'
|
11
|
+
|
12
|
+
rpc_port = 18800
|
13
|
+
$ws = MessagePack::RPC::Client.new('127.0.0.1', rpc_port)
|
14
|
+
|
15
|
+
get '/' do
|
16
|
+
erb :rpc
|
17
|
+
end
|
18
|
+
|
19
|
+
post '/push' do
|
20
|
+
data = {'Hello'=>'World!', 'data' => params}
|
21
|
+
$ws.call(:push_data, data)
|
22
|
+
redirect '/', 303
|
23
|
+
end
|
24
|
+
|
25
|
+
set :port, 8080
|
26
|
+
|
data/examples/rpc.rb
ADDED
@@ -0,0 +1,47 @@
|
|
1
|
+
# RPC push
|
2
|
+
# This program receives messages.
|
3
|
+
# See ./rpc file which sends messages to this program.
|
4
|
+
|
5
|
+
require 'rubygems'
|
6
|
+
require 'rev/websocket'
|
7
|
+
require 'msgpack/rpc'
|
8
|
+
require 'json'
|
9
|
+
|
10
|
+
$sockets = {}
|
11
|
+
|
12
|
+
class MyConnection < Rev::WebSocket
|
13
|
+
def on_open
|
14
|
+
puts "WebSocket opened from '#{peeraddr[2]}': request=#{request.inspect}"
|
15
|
+
$sockets[self] = self
|
16
|
+
end
|
17
|
+
|
18
|
+
def on_close
|
19
|
+
puts "WebSocket closed"
|
20
|
+
$sockets.delete(self)
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
class RPCServer
|
25
|
+
def push_data(data)
|
26
|
+
$sockets.each_key {|sock|
|
27
|
+
sock.send_message(data.to_json)
|
28
|
+
}
|
29
|
+
nil
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
host = '0.0.0.0'
|
34
|
+
port = ARGV[0] || 8081
|
35
|
+
|
36
|
+
rpc_port = 18800
|
37
|
+
|
38
|
+
loop = Rev::Loop.default
|
39
|
+
|
40
|
+
ws = Rev::WebSocketServer.new(host, port, MyConnection)
|
41
|
+
ws.attach(loop)
|
42
|
+
|
43
|
+
rpc = MessagePack::RPC::Server.new(loop)
|
44
|
+
rpc.listen('127.0.0.1', rpc_port, RPCServer.new)
|
45
|
+
|
46
|
+
loop.run
|
47
|
+
|
data/examples/shoutchat.rb
CHANGED
@@ -41,8 +41,7 @@ $record = []
|
|
41
41
|
|
42
42
|
class ShoutChatConnection < Rev::WebSocket
|
43
43
|
def on_open
|
44
|
-
@host =
|
45
|
-
return unless @host
|
44
|
+
@host = peeraddr[2]
|
46
45
|
puts "connection opened: <#{@host}>"
|
47
46
|
|
48
47
|
@sid = $pubsub.subscribe {|data|
|
@@ -53,7 +52,7 @@ class ShoutChatConnection < Rev::WebSocket
|
|
53
52
|
end
|
54
53
|
|
55
54
|
def on_message(data)
|
56
|
-
puts "broadcasting: <#{@host}> #{data}"
|
55
|
+
puts "broadcasting: <#{@host}> '#{data}'"
|
57
56
|
|
58
57
|
$pubsub.publish(data)
|
59
58
|
$record.push(data)
|
@@ -61,7 +60,6 @@ class ShoutChatConnection < Rev::WebSocket
|
|
61
60
|
end
|
62
61
|
|
63
62
|
def on_close
|
64
|
-
return unless @host
|
65
63
|
puts "connection closed: <#{@host}>"
|
66
64
|
|
67
65
|
$pubsub.unsubscribe(@sid)
|
@@ -0,0 +1,67 @@
|
|
1
|
+
<!DOCTYPE html>
|
2
|
+
<html>
|
3
|
+
<head>
|
4
|
+
<meta charset="UTF-8" />
|
5
|
+
<meta content="text/css" http-equiv="content-style-type" />
|
6
|
+
<meta content="text/javascript" http-equiv="content-script-type" />
|
7
|
+
|
8
|
+
<script type="text/javascript" src='js/jquery.min.js'></script>
|
9
|
+
<script type="text/javascript" src='js/swfobject.js'></script>
|
10
|
+
<script type="text/javascript" src='js/FABridge.js'></script>
|
11
|
+
<script type="text/javascript" src='js/web_socket.js'></script>
|
12
|
+
<script type="text/javascript" src='js/json2.js'></script>
|
13
|
+
<link rel="stylesheet" type="text/css" href="echo.css" />
|
14
|
+
|
15
|
+
<title>Rev-WebSocket Demo: Echo server</title>
|
16
|
+
|
17
|
+
<script>
|
18
|
+
WS_URL = "ws://localhost:8081";
|
19
|
+
WEB_SOCKET_SWF_LOCATION = "js/WebSocketMain.swf";
|
20
|
+
|
21
|
+
var global = this;
|
22
|
+
|
23
|
+
$(document).ready(function(){
|
24
|
+
|
25
|
+
function debug(message) {
|
26
|
+
html = "<p><span class='time'>"+new Date()+"</span>"+message+"</p>"
|
27
|
+
$("#debug").append(html);
|
28
|
+
}
|
29
|
+
|
30
|
+
debug("connecting to "+WS_URL+"...");
|
31
|
+
ws = new WebSocket(WS_URL);
|
32
|
+
|
33
|
+
ws.onopen = function() {
|
34
|
+
debug("connected.");
|
35
|
+
|
36
|
+
text = "client: hello";
|
37
|
+
ws.send(text);
|
38
|
+
|
39
|
+
debug("message sent: "+text);
|
40
|
+
}
|
41
|
+
|
42
|
+
ws.onclose = function() {
|
43
|
+
debug("disconnected...");
|
44
|
+
}
|
45
|
+
|
46
|
+
ws.onerror = function(msg) {
|
47
|
+
debug("failed to connect:"+msg);
|
48
|
+
}
|
49
|
+
|
50
|
+
ws.onmessage = function(event) {
|
51
|
+
debug("message received: "+event.data);
|
52
|
+
$("#message").append("<p>"+event.data+"</p>");
|
53
|
+
}
|
54
|
+
});
|
55
|
+
</script>
|
56
|
+
</head>
|
57
|
+
<body>
|
58
|
+
<div>
|
59
|
+
<form action="/push" target="_blank" method="post">
|
60
|
+
<input type="text" name="text" id="text" value="text..." />
|
61
|
+
<input type="submit" value="submit" />
|
62
|
+
</form>
|
63
|
+
</div>
|
64
|
+
|
65
|
+
<div id="message"></div>
|
66
|
+
<div id="debug"></div>
|
67
|
+
</body>
|
data/lib/rev/websocket.rb
CHANGED
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rev-websocket
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 29
|
5
5
|
prerelease: false
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 1
|
9
|
-
-
|
10
|
-
version: 0.1.
|
9
|
+
- 3
|
10
|
+
version: 0.1.3
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- FURUHASHI Sadayuki
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2010-07-
|
18
|
+
date: 2010-07-22 00:00:00 +09:00
|
19
19
|
default_executable:
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|
@@ -77,8 +77,11 @@ files:
|
|
77
77
|
- examples/public/js/web_socket.js
|
78
78
|
- examples/public/shoutchat.css
|
79
79
|
- examples/public/shoutchat.html
|
80
|
+
- examples/rpc
|
81
|
+
- examples/rpc.rb
|
80
82
|
- examples/shoutchat
|
81
83
|
- examples/shoutchat.rb
|
84
|
+
- examples/views/rpc.erb
|
82
85
|
- lib/rev-websocket.rb
|
83
86
|
- lib/rev/websocket.rb
|
84
87
|
- lib/rev/websocket/spec.rb
|
@@ -118,4 +121,5 @@ specification_version: 3
|
|
118
121
|
summary: WebSocket server based on Rev
|
119
122
|
test_files:
|
120
123
|
- examples/echo.rb
|
124
|
+
- examples/rpc.rb
|
121
125
|
- examples/shoutchat.rb
|