Не http в mochiweb
Я использую mochiweb для сервера, который также может получить соединение TCP, на которое клиент отправляет простую строку (без перевода строки строка не http). Mochiweb использует HTTP-сокеты и поэтому не может обнаружить это (я даже не получаю http_error
что я могу легко получить в mochiweb). Как я могу решить это? В идеале я хочу изменить код mochiweb, чтобы сделать setopt({packet, http_or_raw})
но такого рода вещи не существует. Как бы вы порекомендовали справиться с этим? моя текущая идея состояла в том, чтобы изменить mochiweb и использовать erlang:decode_packet
Есть ли лучший подход?
РЕДАКТИРОВАТЬ:
Больше информации. Наш сервер является сервисом веб-сокетов. Мы хотим, чтобы люди без браузера, поддерживающего ws, могли использовать его, поэтому мы используем флеш-объект для создания веб-сокета, когда браузер не может. Флэш-объект должен получить файл политики флеш-памяти. Flash заставляет файл находиться в одном из двух мест: - порт 843 (жестко запрограммирован) - порт службы ws. Протокол флэш-памяти НЕ основан на HTTP. Amazon ELB не позволяет переадресацию портов для большинства портов ниже 1024, поэтому мы внедрили флэш-сервер в тот же порт через патч для mochiweb (https://github.com/nivertech/mochiweb/tree/ori_flash_170811).
Любой совет?
1 ответ
mochiweb не предназначен для обработки этого варианта использования, если он не похож на HTTP, то соединение закрывается и оно отбрасывается. Для этого вам придется обойти mochiweb_http. Я бы предложил использовать альтернативный порт или сделать его похожим на HTTP.
Если бы я действительно хотел сделать то, что, как вы говорите, вы хотите сделать, я бы скопировал mochiweb_http.erl на другое имя (например, иногда_not_http.erl) и внес бы соответствующие изменения в loop/2 и request/2… затем вместо добавления mochiweb_http в ваш руководитель вы бы добавили иногда Нет необходимости или рекомендуется вносить изменения в mochiweb на месте.