Варианты стека нативного протокола через http? - PullRequest
1 голос
/ 22 февраля 2012

У нас есть система клиент / сервер, где все коммуникации осуществляются с использованием собственного протокола через двоичный поток / поток SSL по TCP. Весь наш код написан на C # .NET 2.0, а некоторые части - на 3.5. Наш протокол разработан для поддержки различных шаблонов обмена сообщениями, а именно запроса / ответа, и из-за отсутствия лучшего термина односторонние сообщения от клиента или сервера на нерегулярной основе.

Наша цель - добавить в нашу систему функцию переноса нашего протокола по HTTP. Есть несколько причин для этого, но мне не нужно объяснять это здесь, я думаю. Пожалуйста, скажите мне, если я должен.

Идея состоит в том, чтобы встроить наш протокол как приложение / двоичный файл в запросы HTTP с использованием стандартных методов запроса, т. Е. GET, PUT, POST, но не DELETE, и следуя спецификации HTTP. Это было бы довольно просто сделать, если бы наш протокол был только запрос / ответ. Основная проблема связана с односторонними сообщениями и, более конкретно, с нежелательными сообщениями, поступающими с сервера. Другая важная проблема заключается в том, что HTTP не ориентирован на постоянные соединения, но я верю, что с HTTP / 1.1 это можно преодолеть. Третья проблема заключается в том, что соединения с сервером не являются без сохранения состояния.

Мы разрабатывали и создавали прототипы в течение пары недель, и у нас было несколько идей:

  1. Рефакторинг кода на коммуникационном и протокольном уровнях как на стороне сервера, так и на стороне клиента. Хотя большая часть кода является общей, это большая работа, которая, по всей вероятности, не будет иметь успеха. Вопрос в том, может ли это быть сделано с нашим плохо разработанным протоколом?
  2. Используйте прокси-подход. Это означает создание HTTP-сервера с использованием WCF, развертывание HTTP-сообщений и ретрансляцию собственных сообщений на наш сервер и с него через постоянные соединения. Это потребовало бы уровня абстракции на стороне клиента, который фактически поддерживал бы два соединения с прокси. Одно соединение для выполнения запроса / ответа, а другое - для передачи нежелательных сообщений с использованием метода отложенного ответа.
  3. HTTP-туннелирование, которое мы еще не исследовали.

Мы надеемся, что кто-то сталкивался с этой проблемой раньше и мог бы дать какой-нибудь здравый совет?

Пожалуйста, примите мои извинения, если это неправильное место для размещения этого вопроса.

1 Ответ

1 голос
/ 22 февраля 2012

Для сообщений, инициируемых сервером, вы можете рассмотреть WebSockets . Согласно блогу Скотта Гатри , в ASP.Net MVC 4 beta поддерживается поддержка веб-сокетов.

...