Скачиваний:
3
Добавлен:
18.07.2023
Размер:
478.72 Кб
Скачать

8

Министерство науки и высшего образования РФ

Федеральное государственное бюджетное образовательное учреждение высшего образования

ТОМСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ СИСТЕМ УПРАВЛЕНИЯ И РАДИОЭЛЕКТРОНИКИ (ТУСУР)

Кафедра автоматизированных систем управления (АСУ)

Отчет по лабораторной работе №5

Изучение json, Node.js и websocket, простейший пример парсинга.

По дисциплине «Сети и телекоммуникации»

Выполнили студенты гр. 438 — 1:

___________ Богачев Р. Е.

___________ Матвиенко Ю. А.

«____» _________ 2021

Проверил доцент каф. АСУ:

___________ Суханов А.Я.

«____» _________ 2021

Томск 2021

Введение

Основной целью данной лабораторной работы является работы с асинхронными процессами, путем создания чата с использованием технологий WebSocket, изучение JSON формата. Цель работы: Научиться использовать технологии WebSocket, парсинга страниц для создания простого веб-чата.

  1. Индивидуальное задание

Реализовать чат двух клиентов таким образом, что сообщения между ними передаются в формате json.

  1. Листинг программы

  • SERVER.PY

import tornado.websocket

import tornado.web

import tornado.ioloop

import json

ADDRESS = 'localhost'

PORT = 8000

class HttpInitialRequest(tornado.web.RequestHandler):

def get(self):

print("Http request received!")

self.render('index.html', address=ADDRESS, port=PORT)

class WebSocketHandler(tornado.websocket.WebSocketHandler):

clients = []

def check_origin(self, origin):

return True

def open(self):

print("New WebSocket connection established")

self.clients.append(self)

def on_message(self, message):

print("Received message: " + message)

for client in self.clients:

client.write_message(message)

def on_close(self):

self.clients.remove(self)

print("WebSocket connection closed")

def main():

app = tornado.web.Application([(r'/ws', WebSocketHandler),(r'/', HttpInitialRequest)])

app.listen(PORT, ADDRESS)

print("Server started working. Listening on port {0}, adress: {1}".format(PORT, ADDRESS))

tornado.ioloop.IOLoop.instance().start()

if __name__ == '__main__':

main()

  • INDEX.HTML

<!DOCTYPE html>

<html lang="en">

<head>

<meta charset="UTF-8">

<meta http-equiv="X-UA-Compatible" content="IE=edge">

<meta name="viewport" content="width=device-width, initial-scale=1.0">

<title>WebSocket Test</title>

</head>

<body>

<div id="connection-status">

Establishing WebSocket connection...

</div>

<div id='dialog-box' class="textbox" contenteditable="true"></div>

<style>

div.textbox {

background-color: #ececec;

height: 100px;

max-height: 100px;

width: 400px;

overflow-x: hidden;

overflow-y: scroll;

}

</style>

<input name='user_message' type='text' id='user_message_input' />

<button onclick="sendButtonClicked()">

Send Message

</button>

<script type='text/javascript'>

let address = "{{address}}";

let port = "{{port}}";

let ws = new WebSocket("ws://" + address + ":" + port + "/ws");

ws.onmessage = ({data}) => {

data = JSON.parse(data);

console.log(data);

time = "[" + data.time + "]";

msg = data.message + "<br>";

let dialogBox = document.getElementById("dialog-box");

dialogBox.innerHTML += time + msg;

};

ws.onopen = () => {

document.getElementById('connection-status').innerHTML = "WebSocket connection established!";

};

function sendButtonClicked()

{

ws.send(JSON.stringify({

time: (new Date()).toLocaleTimeString(),

message: document.getElementById('user_message_input').value

}));

}

</script>

</body>

</html>

  1. Результаты работы

На рисунке 1 представлен запуск сервера.

Р исунок 1 — запуск сервера

При успешном подключении пользователя в консоли можно наблюдать соответствующие сообщение, представленное на рисунке 2. На том же рисунке можно наблюдать предупреждение: WARNING:tornado.access:404 GET /favicon.ico (::1) 1.00ms. Данное предупреждение говорит о том, что не был найден файл значка веб-сайта, так что данное предупреждение не является критичным.

Рисунок 2 — подключение пользователя к чату

Далее был отправлен текст от первого пользователя чата, после чего был подключен второй пользователь и отправлено сообщение. Результат вышеописанных действий представлен на рисунке 3.

Р исунок 3 — чатинг двух пользователей

При отключении какого-то пользователя данные сообщаются в консоль, данные представлены на рисунке 4. На данном рисунке был отключен первый пользователь, путем закрытия вкладки.

Р исунок 4 — Отключение первого пользователя

Выводы

В результате лабораторной работы был написана простенький чат между двумя пользователями. Научились использовать технологии WebSocket, для работы с которой был использован язык Python 3 и библиотека Tornado. Познакомились со структурой и самим языком JavaScript, изучили что такое асинхронность.

Соседние файлы в папке Лабораторная работа 5