HTTPLISTENER работает хорошо на моно?
-
05-10-2019 - |
Вопрос
Я хочу написать небольшой веб-сервис для бега на небольшом поле Linux. Я предпочитаю код в C #, поэтому я ищу использовать моно.
Я не хочу накладных расходов запуска полного веб-сервера или версии ASP.NET. Я думаю о том, чтобы иметь один процесс с нити, посвященным каждому клиентскому соединению. Общая память между потоками вместо базы данных.
Я немного прочитал на версии Microsoft HTTPListener и как она работает с драйвером http.sys. Увы, документация MONO на этом классе - это просто автоматизированный класс интерфейса без обсуждения того, как он работает под капотом. (Linux не имеет http.sys, поэтому я представляю, что это реализовано существенно по-разному.)
Может ли кто-нибудь указать мне на некоторые ресурсы, обсуждающие этот модуль, пожалуйста?
Большое спасибо, Билл, Billppg.com
(Немного фона к моему вопросу для заинтересованного.)
Некоторое время назад я спросил этот вопрос, заинтересованы в том, чтобы держать длинный разговор открытым с большим количеством обратно. Я поселился на разработке моего собственного рекламного протокола, но люди, которых я говорил, чтобы действительно хотел интерфейс отдыха, даже на стоимость «в порядке, отправить вашу команду сейчас».
Итак, я задавался вопросом о запуске ASP.NET на сервере Linux / Mono, но наткнулся на httplistener. Это казалось идеальным, так как каждая «разговор» может бежать в отдельной нити. Нить, которая вызывает httplistener в цикле, может искать, для какого потока каждое изменяющее соединение предназначено и передает ссылку на эту нить.
Альтернатива для сервисной службы ASP.NET, будет иметь в виду код ASPX забрать состояние из базы данных и записать новое состояние, когда он заканчивается. Да, это будет работать, но это много накладных расходов.
Решение
Привет, класс HTTPLISTENER в Mono работает без особой проблемы. Я думаю, что наиболее значительная разница между его использованием в среде MS и среде Linux заключается в том, что порт 80 не может быть связан без безопасности Root / Su / Sudo. Другие порты не имеют этого ограничения. Например, если вы укажете префикс: http://localhost:1234/
httplistener работает как ожидалось. Однако, если вы добавите префикс http://localhost/
, который вы ожидаете слушать порта 80, он не работает молча. Если вы явно пытаетесь привязать к порту 80 (http: // localhost: 80 /) Тогда вы бросаете исключение. Если вы вызываете ваше приложение в качестве супер пользователя или корня, вы можете явно привязать к порту 80 (http: // localhost: 80 /).
Я еще не исследовал остальные члены HTTPlistener в достаточных деталях, чтобы сделать любые полезные комментарии о том, насколько хорошо он работает в среде Linux. Однако, если есть интерес, я буду продолжать публиковать мои наблюдения.
куриный сендвич
Другие советы
Я не уверен, почему вы хотите выглядеть так глубоко в капюшон. Даже на стороне Microsoft документы о http.sys могут не предоставлять вам действительно ценную информацию, если вы используете .NET Framework.
Знать, если что-то работает на Mono достаточно хорошо, вы всегда должны загружать изображение VMware или VPC и проверить свои приложения на нем.
http://www.go-mono.com/mono-downloads/download.html.
Хотя моно гораздо более зрелый, чем несколько лет назад, мы не можем сказать, что это было проверено достаточно реальными приложениями, такими как Microsoft.net. Поэтому, пожалуйста, проверьте свои приложения и отправьте проблемы, которые вы найдете в Mono Team.
Основываясь на моем опыте, незначительные проблемы фиксированы только в течение нескольких дней, а для основных проблем требуется более длительное время. Но с доступен Mono исходный код, вы можете исправить самостоятельно или узнать хорошие обстрелы большую часть времени.