Im in requirement to push multiple responses for every request from the client side. Im making use of tornado for this purpose with websockets.
I am relatively new to tornado and from what i understand.
import tornado.httpserver
import tornado.websocket
import tornado.ioloop
import tornado.web
import socket
class WSHandler(tornado.websocket.WebSocketHandler):
def open(self):
print 'new connection'
def on_message(self, message):
print 'message received: %s' % message
# Reverse Message and send it back
print 'sending back message: %s' % message[::-1]
self.write_message('%s:%s' % (i,message[::-1]))
def on_close(self):
print 'connection closed'
def check_origin(self, origin):
return True
application = tornado.web.Application([
(r'/ws', WSHandler),
])
how do i make the on_message function push multiple requests.
The html code i use,
<!doctype html>
<html>
<head>
<title>WebSockets Hello World</title>
<meta charset="utf-8" />
<style type="text/css">
body {
text-align: center;
min-width: 500px;
}
</style>
<script src="http://code.jquery.com/jquery.min.js"></script>
<script>
// log function
log = function(data){
$("div#terminal").prepend("</br>" +data);
console.log(data);
};
$(document).ready(function () {
$("div#message_details").hide()
var ws;
$("#open").click(function(evt) {
evt.preventDefault();
var host = $("#host").val();
var port = $("#port").val();
var uri = $("#uri").val();
// create websocket instance
ws = new WebSocket("ws://" + host + ":" + port + uri);
// Handle incoming websocket message callback
ws.onmessage = function(evt) {
log("Message Received: " + evt.data)
alert("message received: " + evt.data);
};
// Close Websocket callback
ws.onclose = function(evt) {
log("***Connection Closed***");
alert("Connection close");
$("#host").css("background", "#ff0000");
$("#port").css("background", "#ff0000");
$("#uri").css("background", "#ff0000");
$("div#message_details").empty();
};
// Open Websocket callback
ws.onopen = function(evt) {
$("#host").css("background", "#00ff00");
$("#port").css("background", "#00ff00");
$("#uri").css("background", "#00ff00");
$("div#message_details").show();
log("***Connection Opened***");
};
});
// Send websocket message function
$("#send").click(function(evt) {
log("Sending Message: "+$("#message").val());
ws.send($("#message").val());
});
});
</script>
</head>
<body>
<h1>WebSockets Hello World</h1>
<div id="connection_details">
<label for="host">host:</label>
<input type="text" id="host" value="localhost" style="background:#ff0000;"/><br />
<label for="port">port:</label>
<input type="text" id="port" value="8888" style="background:#ff0000;"/><br />
<label for="uri">uri:</label>
<input type="text" id="uri" value="/ws" style="background:#ff0000;"/><br />
<input type="submit" id="open" value="open" />
</div>
<div id="message_details">
</br></br>
<label for="message">message:</label>
<input type="text" id="message" value="Hello World!"/><br />
<input type="submit" id="send" value="send" />
</div>
<div id="terminal">
</div>
</body>
</html>
You can call write_message
multiple times.
e.g.
def on_message(self, message):
self.write_message("Message one")
self.write_message("Message two")