Member 13606974 Ответов: 2

Проблема с fork() и хранением данных пользователя


Сначала я написал простой мессенджер, который не использовал fork для заключения контракта между хостом и Пользователем и хранил информацию о пользователях в структуре, поэтому, когда пользователь попросил их, я вернул их ему/ей.
но я нахожу, что хост не может отвечать нескольким пользователям одновременно без разветвления, и теперь, когда я использую fork, я не знаю, что происходит, поэтому я не могу вернуть информацию о пользователях ей/ему.
это срочная ситуация, я знаю, что использование базы данных решит ее, но есть ли какие-либо другие предложения, пожалуйста(это было для моего университетского проекта, а крайний срок-еще около 5 часов :( )

Что я уже пробовал:

если вам интересно посмотреть часть кода сообщите мне потому что он слишком длинный и не думаю что будет полезен

2 Ответов

Рейтинг:
17

Jochen Arndt

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

Другим решением является использование списка, содержащего данные о соединении и пользователе.

Но это проектные решения, которые должны быть сделаны до начала написания кода.

В вашем случае использование потоков может быть проще (быстрее) реализовано. Но даже я, как опытный разработчик, вероятно, не сделал бы этого за пять часов.


Member 13606974

Я знаю, что это невозможно за 5 часов: (, но хотел попробовать это позже в отпуске, так это связано с базой данных или нет?(Теперь я даже не знаю, что такое база данных)

Jochen Arndt

Разветвление и сокеты никак не связаны с базами данных.

Это еще одно дизайнерское решение, как хранить ваши пользовательские данные. Приложение для многих пользователей, вероятно, будет использовать для этого базу данных. Но для нескольких пользователей вы также можете создать файл данных для каждого пользователя. Такие файлы могут быть текстовыми или содержать сериализованные объекты.

Рейтинг:
1

OriginalGriff

Цитата:
Я знаю, что это невозможно за 5 часов: (, но хотел попробовать это позже в отпуске, так это связано с базой данных или нет?(Теперь я даже не знаю, что такое база данных)

Вероятно, нет: проблема в том, что когда вы говорите своему сокету слушать, он не возвращается до тех пор, пока не установит соединение, поэтому для поддержки нескольких пользователей вам нужно несколько процессов - а это значит, что вам нужно использовать fork а затем ответить на соответствующий сокет, когда он получает сообщение. База данных не поможет вам в этом, она не поддерживает несколько сокетов, она просто хранит данные!

У вас осталось всего три часа, и, честно говоря, если вы не можете заставить вилку / сокеты работать за это время, то то, как вы храните данные, не имеет значения (не говоря уже о том, что изучение баз данных - это не пятиминутная работа-черт возьми, вам, вероятно, потребуется больше времени, чтобы установить многопользовательскую систему баз данных в первую очередь, не говоря уже о том, чтобы научиться ее использовать!)

Если вы можете работать над этим в течение отпуска, то сделайте это: сначала разберитесь с разветвлением и сокетами и не беспокойтесь о данных до тех пор, пока это не произойдет.


Member 13606974

в настоящее время я начал изучать их, Спасибо

OriginalGriff

Всегда пожалуйста!