Google App Engine Channel API の仕組みを理解するための簡単なコードを作成しました。ただし、実際には私のコードは機能せず、その理由はわかりません。私はPythonの経験があまりないので、ばかげた間違いかもしれませんが、ご容赦ください。
サーバ:
from google.appengine.api import channel
import webapp2
import jinja2
import os
import time
channel_key = 'key'
class MainHandler(webapp2.RequestHandler):
def get(self):
token = channel.create_channel(channel_key)
template_values = {'token': channel_key}
template = env.get_template('index.html')
self.response.write(template.render(template_values))
class OpenedHandler(webapp2.RequestHandler):
def post(self):
channel.send_message(channel_key, "hi")
env = jinja2.Environment(loader=jinja2.FileSystemLoader(os.path.dirname(__file__)))
app = webapp2.WSGIApplication([
('/', MainHandler),
('/opened', OpenedHandler)
], debug=True)
クライアント:
<!DOCTYPE html>
<html>
<head>
</head>
<body>
<script>
var token = "{{ token }}";
onOpened = function() {
var xhr = new XMLHttpRequest();
xhr.open('POST', '/opened');
xhr.send();
};
onMessage = function(message) {
alert("something recieved");
alert(message);
}
</script>
<script type="text/javascript" src="/_ah/channel/jsapi"></script>
<script>
channel = new goog.appengine.Channel(token);
socket = channel.open();
socket.onopen = onOpened;
socket.onmessage = onMessage;
socket.onerror = function(e){
alert("error:"+e['description']);
};
socket.onclose = function(){
alert("close");
};
</script>
</body>
</html>
Javascript コンソールは、/opened に正常に送信されたと表示しますが、応答していないため、アラートは表示されません。どこに問題があるのか わかりますか?
ありがとう
編集: onerror および onclose イベント ハンドラーを JavaScript に追加し、ページを開いた直後に、「無効な + トークン」という onerror イベントを呼び出し、次に onclose イベントを呼び出します。