Я делаю доказательство концепции-приложения, которое, возможно, однажды станет источником дохода.
Потоки данных определяют, что должно быть клиент-сервер приложение, информация делится между клиентами и должна сохраняться.совет по архитектуре клиент-сервер
У меня есть опыт написания автономных приложений, я смоделировал приложение и написал клиент. Связь с сервером - это только заглушка.
Итак, теперь у меня есть протокол в виде интерфейса (C#) с вызовами метода.
Четыре из звонков предназначены для запроса информации и два для передачи данных на сервер.
Данные находятся в классах, которые я хотел бы заморозить и восстановить на другой стороне.
В будущем я хотел бы портировать клиент на другие ОС, поэтому я не хотел бы делать что-то, что я должен переписать на сервере из-за краха, если я не могу этого избежать.
Я также хотел бы обновить данные на клиенте с неопределенным интервалом. Сегодня я не знаю, как это сделать.
Мое приложение однопоточный, Windows Forms
Мои предположения что:
* Я буду использовать TCP/IP в той или иной форме ниже всего. Я должен настроить канал, установить IP-адреса и т. Д., У меня есть идея, что я должен делать.
* Передним интерфейсом сервера будет многопоточный, чтобы позволить более одному клиенту одновременно разговаривать с сервером. Синхронизация будет внутренней для сервера.
* Прогнозируемый объем данных, максимум: Текст 1000 * 1кбайт, 100 000 объектов с 4 состояниями. 20 000 обновлений/день. Но это путь в будущем.
мая три самый большой вопрос является
1. Протокол связи. Как мне сопоставить вызовы методов, те, которые у меня есть в интерфейсе, к тому, что я могу передавать по каналу TCP/IP?
2. Мне нужен совет по хорошему шаблону serialize чтение и запись в «базу данных», база данных не обязательно должна быть сервером sql.
3. Могу ли я разрешить серверу отправлять обновления клиенту, не делая его многопоточным приложением с одним потоком, только слушая сокет?
Я с удовольствием обновлю свой вопрос, если потребуется дополнительная информация.
Спасибо заранее.
Gorgen
Я начал смотреть на WCF (Windows Communication Fundation). Я полагаю, что если я выберу этот путь, я буду привязан к .NET, и я не могу разрешить другие ОС. Это так? Также, WCF, он решит мои вопросы 2 и 3 тоже? – Gorgen
Поскольку вы отметили вопрос как .NET, я предположил, что это направление, которое вы искали. Но да, если вы выберете WCF, вы привязаны к .NET на сервере. В зависимости от выбранных вами привязок вы можете иметь клиентов не.NET. В зависимости от выбранной вами привязки (которая должна быть дуплексной привязкой и, следовательно, ее проще всего достичь с помощью .NET-клиента), WCF является жизнеспособным ответом на №3. Что касается №2, я не уверен, что вы ожидаете отличаться от автономных приложений с базой данных. –
Благодарим вас за разъяснения, я просто хотел почувствовать гибкость решения, и я должен сказать, что у меня есть несколько противоречащих друг другу целей, что-то работаю и сделаю это надежным. # 2 Если я обслуживаю клиента, а другой клиент хочет быть поданным, я должен начать новый поток или отклонить второй клиент, возможно, поместить его в список ожидания. Тогда у меня есть два потока, которые потенциально могут писать на одни и те же данные и необходимость какой-либо блокировки или чего-то еще. Возможно, это происходит за шторами с WCF, но где-то это нужно сделать. – Gorgen