Форум сайта python.su
ZerGДа ему надо будет потоки сделать только ещё, очередь запросов от клиентов и очередь ответов клиентам. Потом один поток будет следить за сокетом и добавлять из него информацию в клиентскую очередь запросов. Второй поток будет выполнять на основе этой клиентской очереди запросов операции с датчиками и ответы складывать в клиентскую очередь ответов. А третий поток будет брать ответы из клиентской очереди ответов и отсылать информацию в соответствующие клиентские сокеты. Чтобы это всё написать, нужно понимать не сокеты, а потоки. И вот в этом-то проблема, потому что по потокам надо сначала книжку читать, в которой всё объясняется по шагам на многих-многих страницах.
сокеты тут запределом галактических империй
Отредактировано py.user.next (Окт. 20, 2023 01:00:41)
Офлайн
> Да ему надо будет потоки сделать только ещё, очередь запросов от клиентов и очередь ответов клиентам … А третий поток будет брать ответы из клиентской очереди ответов и отсылать информацию в соответствующие клиентские сокеты.
Да нет. Нужен только один поток на сетевую часть, причём его доже особо синхронизировать не придётся. А вот эти три потока с очередями синхронизации делают реальные дебилы которые способны только читать книжки по потокам с многими-многими страницами
Онлайн
RodegastУ программы, в которой нет многопоточности, есть один поток. Поэтому когда ты говоришь про один поток, их там на самом деле два и они общаются между собой. В нормальных языках они ещё параллелятся на процессоры, а в питоне нет, в нём только эмуляция параллельности. Только ты нихрена не читал, как обычно, поэтому теорию эту не знаешь.
Нужен только один поток на сетевую часть
RodegastСколько у него программ одновременно туда будет подключаться? Сколько экземпляров? С чего ты взял, что он будет подключаться туда только одной программкой, только вручную и только один раз в день? Ну с того, что ты сам так делаешь, потому что у тебя ничего не автоматизировано нигде.
Нужен только один поток на сетевую часть, причём его доже особо синхронизировать не придётся.
Отредактировано py.user.next (Окт. 20, 2023 02:23:54)
Офлайн
Rodegastpy.user.next в целом ответил развернуто
> Да ему надо будет потоки сделать только ещё, очередь запросов от клиентов и очередь ответов клиентам … А третий поток будет брать ответы из клиентской очереди ответов и отсылать информацию в соответствующие клиентские сокеты.Да нет. Нужен только один поток на сетевую часть, причём его доже особо синхронизировать не придётся. А вот эти три потока с очередями синхронизации делают реальные дебилы которые способны только читать книжки по потокам с многими-многими страницами
Офлайн
> Я же думаю о сотнях программ, которые подключаются к этому сокету по многу раз в день
Ой! Ты опять таблетки не выпил? Быстрее прими галоперидол, а то будет как в прошлый раз…
Онлайн
> Я неопнимаю зачем для такой простой задачи писать сокеты и трахать себе мозг с потоками
А я не понимаю зачем для такой простой задачи нужен вебсервер, fastapi и всё прочее. Сокеты это легко, потоки тоже, не хочешь потоков сделай асинхронку. Там работы часа на 1,5.
> Особенно товарищь упрется когда нужно будет бить сообщения по длине буфера и так далее с двух сторон
Чяго? Какие ещё буфера? Если ты не в теме, то лучше молчи, а то за дурачка сойдешь
Онлайн
RodegastСокет использует передачу такую, что надо буфер делать. Если сообщение не поместится в буфер, нужно два буфера склеивать. А если в буфере два сообщения поместились, их надо разделять. А если их там поместилось не половинка и не два, а два с половиной? Вот у тебя мозг сломается, точно. То есть нужно их склеивать, расклеивать, сидеть там, анализ вести. Ты вот говоришь JSON передавать там, а внутри-то может быть фигурная скобочка, и какая из них последняя, чтобы два документа разделить в одной сессии? Они бывают вложенные и ещё в строках. Вот он подключился на сокет и сначала говорит, что ему надо этот датчик, а потом говорит, что ему надо вот этот датчик, на сокет это всё приходит просто непрерывно. Поэтому нужно разделить эти сообщения. Так они ещё могут попадать только своими частями в буфер считывания, а не целиком, и нужно ждать следующее заполнение буфера, чтобы это всё склеить в единый поток данных, а потом уже этот поток данных делить по каким-то логическим меткам. Так что, я думаю, ZerG вот про это говорит.
Какие ещё буфера?
Отредактировано py.user.next (Окт. 21, 2023 16:39:34)
Офлайн
RodegastТы бы поаккуратнее на поворотах
Чяго? Какие ещё буфера? Если ты не в теме, то лучше молчи, а то за дурачка сойдешь
from sanic import Sanic from sanic.response import text app = Sanic("MyHelloWorldApp") @app.get("/dev_1") async def hello_world(request): data = get_data_from_device(1) return text(data) @app.get("/log") async def hello_world(request): data = "SELECT * FROM Logs WHERE XX".fetchall() return text(data)
Отредактировано ZerG (Окт. 21, 2023 16:31:58)
Офлайн
> Ты бы поаккуратнее на поворотах
> А то похоже что не в теме ты сам и сам же кудато сойдешь.
Тогда ткни меня носом в тот буфер размер которого нужно выставить для организации обмена сообщениями через TCP сокет
> Выше тебе py.user.next детально расписал и это только начало
Он выписал себе детальную справку в том что не знаком с передачей данных через сокеты. Хотя мог бы и не выписывать, это и так понятно.
> И самое главное - автору потом все это нужно выкидвывать в тот же веб
С чего ты это взял?
Появилась необходимость сделать интерфейс (API) для взаимодействия с ним из другого приложения (запуск/останов, получение данных). Клиентское приложение может быть на другом компьютере.
В интернете по запросу API информация в основном по RESTAPI (взаимодействие через HTTP). Не хотелось бы ещё и вэбсервер поднимать для этого.
Онлайн
Misha_White
Главное, чтобы программа могла что-то принимать (команды: текст, JSON) и отдавать (текст, JSON).
На самом деле, у меня ещё Джанга есть на другом серваке. Думаю в её базу (или в отдельную через роутер) писать данные, чтобы через Джангу управлять кое-какими функциями, реализованными на стороне БД (менеджер расписаний, например). Да и Rest запросы можно прям из Джанги в приложение отправлять….
RodegastХ__йивознаит - может отсюда?
С чего ты это взял?
Отредактировано ZerG (Окт. 21, 2023 21:51:21)
Офлайн