4
<title>WebSockets Load Test</title>
5
<script src="include/util.js"></script>
6
<script src="include/webutil.js"></script>
7
<script src="include/base64.js"></script>
8
<script src="include/websock.js"></script>
9
<!-- Uncomment to activate firebug lite -->
11
<script type='text/javascript'
12
src='http://getfirebug.com/releases/lite/1.2/firebug-lite-compressed.js'></script>
20
Host: <input id='host' style='width:100'>
21
Port: <input id='port' style='width:50'>
22
Encrypt: <input id='encrypt' type='checkbox'>
23
Send Delay (ms): <input id='sendDelay' style='width:50' value="100">
24
<input id='connectButton' type='button' value='Start' style='width:100px'
25
onclick="connect();">
30
<th align="right">Packets sent:</th>
31
<td align="right"><div id='sent'>0</div></td>
33
<th align="right">Good Packets Received:</th>
34
<td align="right"><div id='received'>0</div></td>
36
<th align="right">Errors (Bad Packets Received:)</th>
37
<td align="right"><div id='errors'>0</div></td>
43
<textarea id="error" style="font-size: 9;" cols=80 rows=25></textarea>
52
cell.innerHTML += errors + ": " + str + "\n";
53
cell.scrollTop = cell.scrollHeight;
56
var host = null, port = null, sendDelay = 0;
57
var ws = null, update_ref = null, send_ref = null;
58
var sent = 0, received = 0, errors = 0;
60
var recv_seq = 0, send_seq = 0;
62
Array.prototype.pushStr = function (str) {
64
for (var i=0; i < n; i++) {
65
this.push(str.charCodeAt(i));
72
return parseInt(x,10)+parseInt(y,10);
75
function check_respond(data) {
76
//console.log(">> check_respond");
77
var first, last, str, length, chksum, nums, arr;
78
first = String.fromCharCode(data.shift());
79
last = String.fromCharCode(data.pop());
83
error("Packet missing start char '^'");
88
error("Packet missing end char '$'");
91
arr = data.map(function(num) {
92
return String.fromCharCode(num);
93
} ).join('').split(':');
99
//console.log(" length:" + length + " chksum:" + chksum + " nums:" + nums);
100
if (seq != recv_seq) {
102
error("Expected seq " + recv_seq + " but got " + seq);
103
recv_seq = parseInt(seq,10) + 1; // Back on track
107
if (nums.length != length) {
109
error("Expected length " + length + " but got " + nums.length);
112
//real_chksum = nums.reduce(add);
114
for (var i=0; i < nums.length; i++) {
115
real_chksum += parseInt(nums.charAt(i), 10);
117
if (real_chksum != chksum) {
119
error("Expected chksum " + chksum + " but real chksum is " + real_chksum);
123
//console.log(" Packet checks out: length:" + length + " chksum:" + chksum);
124
//console.log("<< check_respond");
128
var length = Math.floor(Math.random()*(max_send-9)) + 10; // 10 - max_send
129
var numlist = [], arr = [];
130
for (var i=0; i < length; i++) {
131
numlist.push( Math.floor(Math.random()*10) );
133
//chksum = numlist.reduce(add);
135
for (var i=0; i < numlist.length; i++) {
136
chksum += parseInt(numlist[i], 10);
138
var nums = numlist.join('');
139
arr.pushStr("^" + send_seq + ":" + length + ":" + chksum + ":" + nums + "$")
145
function update_stats() {
146
$D('sent').innerHTML = sent;
147
$D('received').innerHTML = received;
148
$D('errors').innerHTML = errors;
152
console.log(">> init_ws");
153
var scheme = "ws://";
154
if ($D('encrypt').checked) {
157
var uri = scheme + host + ":" + port;
158
console.log("connecting to " + uri);
162
ws.on('message', function() {
163
//console.log(">> WebSockets.onmessage");
164
arr = ws.rQshiftBytes(ws.rQlen());
166
//console.log("<< WebSockets.onmessage");
168
ws.on('open', function() {
169
console.log(">> WebSockets.onopen");
170
send_ref = setInterval(send, sendDelay);
171
console.log("<< WebSockets.onopen");
173
ws.on('close', function(e) {
174
console.log(">> WebSockets.onclose");
175
clearInterval(send_ref);
176
console.log("<< WebSockets.onclose");
178
ws.on('error', function(e) {
179
console.log(">> WebSockets.onerror");
180
console.log(" " + e);
181
console.log("<< WebSockets.onerror");
184
console.log("<< init_ws");
188
console.log(">> connect");
189
host = $D('host').value;
190
port = $D('port').value;
191
sendDelay = parseInt($D('sendDelay').value, 10);
192
if ((!host) || (!port)) {
193
console.log("must set host and port");
201
update_ref = setInterval(update_stats, 1);
203
$D('connectButton').value = "Stop";
204
$D('connectButton').onclick = disconnect;
205
console.log("<< connect");
208
function disconnect() {
209
console.log(">> disconnect");
214
clearInterval(update_ref);
215
update_stats(); // Final numbers
219
$D('connectButton').value = "Start";
220
$D('connectButton').onclick = connect;
221
console.log("<< disconnect");
225
/* If no builtin websockets then load web_socket.js */
226
if (window.WebSocket) {
227
VNC_native_ws = true;
229
VNC_native_ws = false;
230
console.log("Loading web-socket-js flash bridge");
231
var extra = "<script src='include/web-socket-js/swfobject.js'><\/script>";
232
extra += "<script src='include/web-socket-js/FABridge.js'><\/script>";
233
extra += "<script src='include/web-socket-js/web_socket.js'><\/script>";
234
document.write(extra);
237
window.onload = function() {
238
console.log("onload");
239
if (!VNC_native_ws) {
240
console.log("initializing web-socket-js flash bridge");
241
WebSocket.__swfLocation = "include/web-socket-js/WebSocketMain.swf";
242
WebSocket.__initialize();
244
var url = document.location.href;
245
$D('host').value = (url.match(/host=([^&#]*)/) || ['',''])[1];
246
$D('port').value = (url.match(/port=([^&#]*)/) || ['',''])[1];