wie kann ich eine websocket auf google app engine für html5
dies ist die demo, dass eine Einfache chat-client verwenden , müssen Sie öffnen Sie es auf webkit-Browser wie chrome und Safari,
den demo-Einsatz einer web-socket-server, basierend auf node.js: websocket-server-node.js,
aber ich denke, es kann nicht ein Deployment auf der google app engine ,
so wussten Sie, wie man ein websocket mit python auf google app engine ,
und ausführen der demo drauf ,
Dank
dies ist der code :
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset=utf-8 />
<meta name="viewport" content="width=620" />
<title>HTML5 Demo: Web Socket</title>
<link rel="stylesheet" href="http://html5demos.com/css/html5demos.css" type="text/css" />
<script src="http://html5demos.com/js/h5utils.js"></script></head>
<body>
<section id="wrapper">
<header>
<h1>Web Socket</h1>
</header>
<style>
#chat { width: 97%; }
.them { font-weight: bold; }
.them:before { content: 'them '; color: #bbb; font-size: 14px; }
.you { font-style: italic; }
.you:before { content: 'you '; color: #bbb; font-size: 14px; font-weight: bold; }
#log {
overflow: auto;
max-height: 300px;
list-style: none;
padding: 0;
/* margin: 0;*/
}
#log li {
border-top: 1px solid #ccc;
margin: 0;
padding: 10px 0;
}
</style>
<article>
<form>
<input type="text" id="chat" placeholder="type and press enter to chat" />
</form>
<p id="status">Not connected</p>
<p>Users connected: <span id="connected">0</span></p>
<p>To test, open two windows with Web Socket support, type a message above and press return.</p>
<p>The server side code is available here: <a href="http://github.com/remy/html5demos/tree/master/server/">node-web-socket & server</a> (note that it runs on <a href="http://nodejs.org/" title="node.js">nodejs</a>)</p>
<ul id="log"></ul>
</article>
<script>
function openConnection() {
// uses global 'conn' object
if (conn.readyState === undefined || conn.readyState > 1) {
conn = new WebSocket('ws://node.remysharp.com:8001');
conn.onopen = function () {
state.className = 'success';
state.innerHTML = 'Socket open';
};
conn.onmessage = function (event) {
var message = JSON.parse(event.data);
if (typeof message == 'string') {
log.innerHTML = '<li class="them">' + message.replace(/[<>&]/g, function (m) { return entities[m]; }) + '</li>' + log.innerHTML;
} else {
connected.innerHTML = message;
}
};
conn.onclose = function (event) {
state.className = 'fail';
state.innerHTML = 'Socket closed';
};
}
}
var connected = document.getElementById('connected'),
log = document.getElementById('log'),
chat = document.getElementById('chat'),
form = chat.form,
conn = {},
state = document.getElementById('status'),
entities = {
'<' : '<',
'>' : '>',
'&' : '&'
};
if (window.WebSocket === undefined) {
state.innerHTML = 'Sockets not supported';
state.className = 'fail';
} else {
state.onclick = function () {
if (conn.readyState !== 1) {
conn.close();
setTimeout(function () {
openConnection();
}, 250);
}
};
addEvent(form, 'submit', function (event) {
event.preventDefault();
// if we're connected
if (conn.readyState === 1) {
conn.send(JSON.stringify(chat.value));
log.innerHTML = '<li class="you">' + chat.value.replace(/[<>&]/g, function (m) { return entities[m]; }) + '</li>' + log.innerHTML;
chat.value = '';
}
});
openConnection();
}
</script> <footer><a href="/">HTML5 demos</a>/<a id="built" href="http://twitter.com/rem">@rem built this</a>/<a href="#view-source">view source</a></footer>
</section>
<a href="http://github.com/remy/html5demos"><img style="position: absolute; top: 0; left: 0; border: 0;" src="http://s3.amazonaws.com/github/ribbons/forkme_left_darkblue_121621.png" alt="Fork me on GitHub" /></a>
</body>
</html>
- mögliche Duplikate von Wie kann ich einen WebSocket-server auf der Oberseite der GAE?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich denke, Sie sollten warten, bis die Channel-API.
dies ist bereits ein Teil des SDK, aber nicht in der Produktion tätig.
Hier ein video, das zeigen diese neue Funktion
Hier eine demo-Anwendung mit einem multiplayer trivia-quiz
EDIT:
verfügbar mit SDK 1.4.0
Beachten Sie, dass diese nun veröffentlicht wurde: http://code.google.com/appengine/docs/python/channel/
Genießen!
Ja, Sie können, wie gezeigt, in einem Kommentar zu einer ähnlichen Frage: Wie kann ich einen WebSocket-server auf der Oberseite der GAE?
Die Einzelheiten der Durchführung dieser code aus der Taifun-app-server ist hier beschrieben: https://code.google.com/p/typhoonae/wiki/WebSockets
Können Sie Schwierigkeiten haben, mit der 30-Sekunden-timeout-Problem, aber wie hat gewesen wies darauf hin, anderswo, Sie können führen, dass Ihr client wieder mit dem server verbinden alle 25 Sekunden oder so, um zu bewahren eine Konstante Verbindung. Grenzfälle, wo teilweise Nachrichten gesendet werden, um mehr als ein socket kann knifflig sein, sollte aber lösbar sein.
Kanäle ist wahrscheinlich besser, wenn Sie mit Javascript für die client -, als die OP zu sein scheint. Websockets kann einfacher sein, wenn Sie vorhandenen code, der bereits über die WS, oder wenn Sie brauchen, um Unterstützung für nicht-JS-clients, die noch nicht haben-Kanäle unterstützen.
Könnten Sie ein Python-basierten WebSocket-Server-Implementierungen, die es da draußen gibt, aber Sie wird es nicht weit bringen mit sich, dass auf AppEngine, da es die Anfrage basiert, und jeder Antrag hat eine maximale Lebensdauer von 30 Sekunden, benötigen Sie einen vserver oder etwas dergleichen, wenn Sie hosten möchten einen chat-server, und in diesem Fall, Sie könnten genauso gut führen Sie die Node.js version.
AppEngine Grenzen: http://code.google.com/appengine/docs/python/runtime.html#Quotas_and_Limits