ラズベリーパイで実行されているサーバーでwebsocketを設定しようとしています。次のコードは、私が見つけた例であるhereから若干修正されています。モバイルデバイスでwebsocketを開くことができません
私はこの例を中心に全体のWebページを構築して、gpioを制御し、piに接続されたシリアルデバイスにメッセージを送信できるようにしました。このサイトとこの例はともに私のラップトップ(ChromeまたはFirefoxを使用しているWindows 10)から完全に機能します。
ただし、携帯電話(Android 5.0.1はAndroid用Chromeを使用)から接続します。ソケットを決して開けないようです。サンプルコードでは、単に「メッセージはここに表示されます」
私の最初の考えはアンドロイドのWebSocketをサポートしていませんでしたが、このサイトに接続してメッセージをエコーすることができましたhttp://www.websocket.org/echo.html。開口部からソケットを妨げる他に何。
?
pysocket.py
import tornado.httpserver
import tornado.websocket
import tornado.ioloop
import tornado.web
class WSHandler(tornado.websocket.WebSocketHandler):
def check_origin(self, origin):
return True
def open(self):
print 'New connection was opened'
self.write_message("Welcome to my websocket!")
def on_message(self, message):
print 'Incoming message:', message
self.write_message("You said: " + message)
def on_close(self):
print 'Connection was closed...'
application = tornado.web.Application([
(r'/ws', WSHandler),
])
if __name__ == "__main__":
http_server = tornado.httpserver.HTTPServer(application)
http_server.listen(8888)
tornado.ioloop.IOLoop.instance().start()
pysocket.php
<!doctype html>
<html>
<head>
<title>WebSockets with Python & Tornado</title>
<meta charset="utf-8" />
<style type="text/css">
body {
text-align: center;
min-width: 500px;
}
</style>
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
<script>
$(function(){
var ws;
var logger = function(msg){
var now = new Date();
var sec = now.getSeconds();
var min = now.getMinutes();
var hr = now.getHours();
$("#log").html($("#log").html() + "<br/>" + hr + ":" + min + ":" + sec + " ___ " + msg);
//$("#log").animate({ scrollTop: $('#log')[0].scrollHeight}, 100);
$('#log').scrollTop($('#log')[0].scrollHeight);
}
var sender = function() {
var msg = $("#msg").val();
if (msg.length > 0)
ws.send(msg);
$("#msg").val(msg);
}
ws = new WebSocket("ws://raspberrypi-mike:8888/ws");
ws.onmessage = function(evt) {
logger(evt.data);
};
ws.onclose = function(evt) {
$("#log").text("Connection was closed...");
$("#thebutton #msg").prop('disabled', true);
};
ws.onopen = function(evt) { $("#log").text("Opening socket..."); };
$("#msg").keypress(function(event) {
if (event.which == 13) {
sender();
}
});
$("#thebutton").click(function(){
sender();
});
});
</script>
</head>
<body>
<h1>WebSockets with Python & Tornado</h1>
<div id="log" style="overflow:scroll;width:500px; height:200px;background-color:#ffeeaa; margin:auto; text-align:left">Messages go here</div>
<div style="margin:10px">
<input type="text" id="msg" style="background:#fff;width:200px"/>
<input type="button" id="thebutton" value="Send" />
</div>
<a href="http://lowpowerlab.com/blog/2013/01/17/raspberrypi-websockets-with-python-tornado/">www.LowPowerLab.com</a>
</body>
</html>
'raspberrypi-mike'の代わりにラズベリーパイのIPを使ってみましたか? –
私はしていません。私は今夜それを試みます。私はノートパソコンが接続できるので、ホスト名が動いていると思った。私の電話にホスト名の代わりにIPが必要な特別な理由はありますか? – CrimsonKnights
ホスト名をipに置き換えると問題が解決しました。今、私の携帯電話のブラウザがホスト名を解決できなかったのは本当に不思議です。 – CrimsonKnights