2
채널 api를 통해 캔버스 요소에서 다른 클라이언트로 가져온 이미지의 데이터 URI를 보내려고합니다.google 앱 엔진 채널 api를 통해 데이터 uri 보내기
및 SendMessage() 함수는 그냥 일반 텍스트를 전송하지만 난 것 같다 못할 때 잘 작동
var pictData = imageCanvas.toDataURL("image/png");
sendPictData(pictData);
function sendPictData(pictData){
dataToSend = encodeURIComponent(pictData);
sendMessage({type: 'blackboardBackground',
image: dataToSend
});
}
function sendMessage(message){
var msgString = JSON.stringify(message);
path = '/lessonarea/message?r={{ key }}' + '&u={{ me }}';
var xhr = new XMLHttpRequest();
xhr.open('POST', path, true);
xhr.send(msgString);
}
내가 점점 계속 오류 "InvalidMessageError" 응용 프로그램 엔진 로그에서 :
이
내 자바 스크립트입니다 데이터 URI를 보낼 수 있습니다.위에서 본 것처럼 sendPictData() 메서드 내에서 url을 인코딩하려고했지만이 방법이 도움이되지 않습니다.
당신이 줄 수있는 도움을 주시면 감사하겠습니다.
업데이트 - 파이썬 처리기 코드 및 로그 출력 :이 로그의 출력이
class MessagePage(webapp2.RequestHandler):
def post(self):
message = self.request.body
lessonRoomKey = self.request.get('r')
user = self.request.get('u')
with LOCK:
lesson_room = LessonRoom.get_by_id(lessonRoomKey)
if lesson_room:
self.handle_message(lesson_room, user, message)
else:
logging.warning('Unknown Lesson room ' + lessonRoomKey)
def handle_message(self, lessonRoom, user, message):
message_obj = json.loads(message)
logging.info("Message type = " + message_obj['type'])
other_user = lessonRoom.get_other_user(user)
lessonRoomKey = lessonRoom.key.id();
if other_user and lessonRoom.has_user(other_user):
on_message(lessonRoom, other_user, message)
def on_message(self, room, user, message):
client_id = make_client_id(room, user)
if room.is_connected(user):
channel.send_message(client_id, message)
입니다 :
나는 핸들러가로 제대로 작동 될 생각하기 전에 언급 한 바와 같이INFO 2013-07-30 21:39:22,582 lessonarea.py:364] Message type = blackboardBackground
ERROR 2013-07-30 21:39:22,583 webapp2.py:1553]
Traceback (most recent call last):
File "/home/alec/google_projects/google_appengine/lib/webapp2/webapp2.py", line 1536, in __call__
rv = self.handle_exception(request, response, e)
File "/home/alec/google_projects/google_appengine/lib/webapp2/webapp2.py", line 1530, in __call__
rv = self.router.dispatch(request, response)
File "/home/alec/google_projects/google_appengine/lib/webapp2/webapp2.py", line 1278, in default_dispatcher
return route.handler_adapter(request, response)
File "/home/alec/google_projects/google_appengine/lib/webapp2/webapp2.py", line 1102, in __call__
return handler.dispatch()
File "/home/alec/google_projects/google_appengine/lib/webapp2/webapp2.py", line 572, in dispatch
return self.handle_exception(e, self.app.debug)
File "/home/alec/google_projects/google_appengine/lib/webapp2/webapp2.py", line 570, in dispatch
return method(*args, **kwargs)
File "/home/alec/google_projects/src/lessonarea.py", line 357, in post
self.handle_message(lesson_room, user, message)
File "/home/alec/google_projects/src/lessonarea.py", line 385, in handle_message
on_message(lessonRoom, other_user, message)
File "/home/alec/google_projects/src/lessonarea.py", line 168, in on_message
channel.send_message(client_id, message)
File "/home/alec/google_projects/google_appengine/google/appengine/api/channel/channel.py", line 209, in send_message
raise InvalidMessageError
InvalidMessageError
일반 텍스트 메시지를 보낼 때 잘 작동합니다.
이것은 자바 스크립트입니다./lessonarea/message의 핸들러로 보내고 있습니다. 해당 처리기에 오류가 기록 된 것을보고 계십니까? 대부분의 경우 오류는 데이터를 파싱하는 핸들러 코드에 있으므로 코드를 표시하면 도움이됩니다. – dragonx
템플릿이 렌더링 될 때 '키'토큰과 '토큰'이 대체됩니까? – Tombatron
@Tombatron 예 템플릿이 렌더링 될 때 'key'와 'me'토큰이 교체됩니다. –