39. Chat Client PING/PONG in JavaScript function main() { var
response = sendPing(); } Call Stack main
40. Call Stack main function main() { var response =
sendPing(); } Chat Client PING/PONG in JavaScript
41. Call Stack main function main() { function sendPing() {
sendPing socket.send(PING); socket.onmessage = function(event) { //
event.data has the PONG }; ??? } var response = sendPing(); } Chat
Client PING/PONG in JavaScript
42. Call Stack main sendPing socket.send function main() { var
response = sendPing(); } function sendPing() { socket.send(PING);
socket.onmessage = function(event) { // event.data has the PONG };
??? } Chat Client PING/PONG in JavaScript
43. Call Stack main sendPing function main() { var response =
sendPing(); } function sendPing() { socket.send(PING);
socket.onmessage = function(event) { // event.data has the PONG };
??? } Chat Client PING/PONG in JavaScript
44. Call Stack main sendPing function main() { var response =
sendPing(); } function sendPing() { socket.send(PING);
socket.onmessage = function(event) { // event.data has the PONG };
??? } Chat Client PING/PONG in JavaScript
45. Call Stack main sendPing function main() { var response =
sendPing(); } function sendPing() { socket.send(PING);
socket.onmessage = function(event) { // event.data has the PONG };
??? } Chat Client PING/PONG in JavaScript
46. Call Stack main function main() { function sendPing() {
sendPing socket.send(PING); socket.onmessage = function(event) { //
event.data has the PONG }; while(noData) { /* Busy Wait?? */ } }
var response = sendPing(); } Chat Client PING/PONG in
JavaScript
47. Chat Client PING/PONG in JavaScript Call Stack main
sendPing function main() { var response = sendPing(); } Browser
Event Queue WebSocket message from chat server function sendPing()
{ socket.send(PING); socket.onmessage = function(event) { //
event.data has the PONG }; while(noData) { /* Busy Wait?? */ }
}
48. Chat Client PING/PONG in JavaScript function sendPing() {
socket.send(PING); socket.onmessage = function(event) { //
event.data has the PONG }; while(noData) { /* Busy Wait?? */ } }
Call Stack main sendPing function main() { var response =
sendPing(); } Browser Event Queue WebSocket message from chat
server
49. Chat Client PING/PONG in JavaScript Call Stack main
sendPing function main() { var response = sendPing(); } Browser
Event Queue WebSocket message from chat server function sendPing()
{ socket.send(PING); socket.onmessage = function(event) { //
event.data has the PONG }; while(noData) { /* Busy Wait?? */ }
}
50. Chat Client PING/PONG in JavaScript Call Stack main
function main() { function sendPing() { sendPing socket.send(PING);
socket.onmessage = function(event) { // event.data has the PONG };
return; } var response = sendPing(); } Browser Event Queue
WebSocket message from chat server
51. Call Stack main function main() { var response =
sendPing(); return; } Browser Event Queue WebSocket message from
chat server function sendPing() { socket.send(PING);
socket.onmessage = function(event) { // event.data has the PONG };
return; } Chat Client PING/PONG in JavaScript
52. Call Stack function main() { var response = sendPing();
return; } Browser Event Queue WebSocket message from chat server
function sendPing() { socket.send(PING); socket.onmessage =
function(event) { // event.data has the PONG }; return; } Chat
Client PING/PONG in JavaScript
53. Call Stack function main() { var response = sendPing();
return; } socket.onmessage callback Browser Event Queue function
sendPing() { socket.send(PING); socket.onmessage = function(event)
{ // event.data has the PONG }; return; } Chat Client PING/PONG in
JavaScript
54. Chat Client PING/PONG in JavaScript function main() { var
response = sendPing(); return; } function sendPing() {
socket.send(PING); socket.onmessage = function({ // event.data has
the PONG }; return; } void main(String[] args) { byte[] response =
sendPing(); } byte[] sendPing() { socket.write(PING);
socket.read(readBuffer); return readBuffer; }
55. Breaking the Browser Language Barrier 1. Key Challenges 2.
Doppio Runtime System Doppio Threads Doppio File System Doppio
Sockets Doppio Unmanaged Heap 3. Proof-of-concept: DoppioJVM