ОО Клиент-Сервер Дизайн

2

Я использую С# для разработки клиент-серверного приложения. Я все еще новичок, и я изучаю веревки С# и OO. Прямо сейчас, я написал на листе бумаги несколько идей. По сути, я бы создал класс "клиент", который содержит все детали (сокеты и т.д.). Класс клиента будет создан и сохранен в массиве, который будет использоваться сервером в цикле. Если подключено 100 клиентов, будет ли значительная память использоваться?

Я предполагаю, что сервер будет проходить через каждый клиент в массиве, проверяя флаг "dataSend", который затем будет помечать сервер для создания объекта NetworkStream для клиента.

Должен ли я создать объект сетевого потока при подключении клиента и закрыть соединение?

Если кто-нибудь может указать мне в сторону написания моего собственного клиент-серверного программного обеспечения, было бы оценено.

  • 4
    Похоже, один здоровенный проект для кого-то начинающего ...
  • 0
    Что я могу сказать, я амбициозен (иначе, я откусываю больше, чем я могу жевать). ;)
Показать ещё 1 комментарий
Теги:
client-server

4 ответа

2
Лучший ответ

Cam, вы описали не совсем реальный дизайн клиент-сервер, так как обе стороны тесно связаны в вашем сценарии, разделяя массив объектов. Подумайте об этом вместо этого с точки зрения запросов и ответов. Клиент делает запрос на сервер по сети, и сервер возвращает ответ клиенту по сети. Они разделяют две вещи: общее сетевое соединение и знание интерфейса, который предоставляет сервер.

Веб - отличный, знакомый экземпляр этого шаблона. Клиент, ваш браузер, создает HTTP-запрос и отправляет его по сетевому соединению с сервером. Сервер интерпретирует запрос и отправляет HTTP-ответ клиенту. Каждый знает, как интерпретировать стандарт HTTP. Это связь между ними, больше ничего.

Я предлагаю начать с реализации очень простого запроса/ответа. Например, клиент отправляет запрос "ВРЕМЯ", и сервер отвечает с текущим временем, а запрос "DATE" отвечает на текущую дату. Имея простой протокол для реализации, вы можете сосредоточиться на изучении механики сетевых классов .NET.

1

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

1

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

Pro tip: проверьте исходный код на некоторые MUD.

  • 0
    Что вы подразумеваете под членом класса?
  • 0
    У вас будет класс клиента (в исходном коде сервера), который представляет 1 клиента, подключенного к серверу. Затем вы должны заключить весь код для связи с клиентом в другой класс (например, «networkInterface»), который будет членом класса клиента. Таким образом, вся логика обработки клиентских данных и код для взаимодействия с клиентом хранятся отдельно.
1

Что-то вроде этого было бы уместно:

  • Как вы сказали, клиент класса Named для хранения клиентского сокета.
  • Ведение таблицы на сервере с клиентом ip: порт как ключ, а клиентский объект - как значение. Это поможет вам отслеживать подключенных клиентов.
  • Использовать асинхронную отправку и получение для клиентов. Таким образом, вместо того, чтобы выполнять итерацию через клиентов, каждый клиент будет получать данные, выполнять задание и отвечать на подключенный клиент.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню