websocket을 사용한 실시간 그래프

10847 단어 websocket파이썬
이런 사용법이 정답인지는 모릅니다만, 라즈파이 센서의 가시화에 사용하려고 합니다.

사전 준비, 전지식(멋진 참고 사이트)



실시간 차트 : htps : // 코 m / 료마 D 사카모토 / ms / 61 1501683 에 df4338
Websocket 주위: htps : // 코 m / Dr10_ 타케히로 /

환경



송신측



OS: Debian GNU/Linux 9.6 (stretch) ※나즈파이입니다
파이썬 : 2.7.13
tornado: 5.1.1

수신측



moment.js: 2.22.2
chart.js: 2.7.3
chartjs-plugin-streaming: 1.7.0

처리 흐름



1. 송신측이 Websocket으로 보낸다.

server.py
#!/bin/env python
# -*- coding: utf-8 -*-
import json
import time

import random
import datetime

import tornado.websocket
import tornado.web
import tornado.ioloop

class SendWebSocket(tornado.websocket.WebSocketHandler):
    def open(self):
        print ('Session Opened. IP:' + self.request.remote_ip)
        self.ioloop = tornado.ioloop.IOLoop.instance()
        self.send_websocket()

    def on_close(self):
        print("Session closed")

    def check_origin(self, origin):
        return True

    def send_websocket(self):
        self.ioloop.add_timeout(time.time() + 0.1, self.send_websocket)
        if self.ws_connection:
            message = json.dumps({
                'data': random.randint(0, 100),
                })
            self.write_message(message)

app = tornado.web.Application([(r"/ws/display", SendWebSocket)])

if __name__ == "__main__":
    app.listen(8080)
    tornado.ioloop.IOLoop.current().start()

2. 수신측이 송신한 데이터를 그래프에 기입한다.

display.html
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
</head>
<body>
<canvas id="myChart"></canvas>
<script type="text/javascript" src="./js/moment.js"></script>
<script type="text/javascript" src="./js/Chart.js"></script>
<script type="text/javascript" src="./js/chartjs-plugin-streaming.js"></script>
<script>
var ctx = document.getElementById('myChart').getContext('2d');
var chart = new Chart(ctx, {
        type: 'line',
        data: {
            datasets: [{
                data: []
            }]
        },
            options: {
                scales: {
                    xAxes: [{
                        type: 'realtime'
                    }]
                }
            } 
        });
// server IP : 192.168.1.1
var connection = new WebSocket('ws://192.168.1.1:8080/ws/display');
connection.onmessage = function (e) {
    chart.data.datasets[0].data.push({
        x: Date.now(),
        y: JSON.parse(e.data)["data"]
    });
    chart.update();
};
</script>
</body>
</html>

움직이다



송신측
$ python server.py
#受信htmlを開いて接続成功時には下記が表示される。
Session Opened. (IP)

수신측

좋은 웹페이지 즐겨찾기