HttpListener работает хорошо над Моно?

Я надеюсь писать небольшой веб-сервис для работы маленького поля Linux. Я предпочитаю кодировать в C#, таким образом, я надеюсь использовать Моно.

Я не хочу издержки выполнения полного веб-сервера или версии Mono ASP.NET. Я думаю о наличии единственного процесса с потоком, имеющим дело с каждым соединением клиента. Общая память между потоками вместо базы данных.

Я читал немного на версии Microsoft HttpListener и как это работает с драйвером Http.sys. Увы, документация Mono относительно этого класса является просто автоматизированным интерфейсом класса без обсуждения того, как это работает под капотом. (Linux не имеет Http.sys, таким образом, я предполагаю, что он реализован существенно по-другому.)

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

Большое спасибо, счет, billpg.com

(Немного предпосылок к моему вопросу для заинтересованного.)

Некоторое время назад я задал этот вопрос, заинтересованный хранением долгого разговора, открытого с большим количеством из назад и вперед. Я обосновался на разработке моего собственного специального протокола, но люди, с которыми я говорил действительно требуемый интерфейс REST, даже за счет "Хорошо, отправляют Вашу команду теперь" сигнал.

Так, я задался вопросом о выполнении ASP.NET на сервере Linux / Моно сервере, но наткнулся на HttpListener. Это казалось идеальным, поскольку каждый "разговор" мог работать в отдельном потоке. Поток, который называет HttpListener в цикле, может искать, для какого потока каждое входящее соединение, и передайте ссылку на тот поток.

Альтернатива для ASP.NET управляемый сервис, должен был бы иметь код ASPX, поднимают состояние с базы данных и записывают новое состояние обратно, когда это заканчивается. Да, это работало бы, но это - много издержек.

20
задан Community 23 May 2017 в 12:24
поделиться

2 ответа

Приветствую, Класс HttpListener в Mono работает без особых проблем. Я думаю, что наиболее существенное различие между его использованием в среде MS и в среде Linux заключается в том, что порт 80 не может быть привязан без прав root/su/sudo. Другие порты не имеют такого ограничения. Например, если вы укажете префикс: http://localhost:1234/, то HttpListener работает как ожидалось. Однако если вы добавите префикс http://localhost/, который, как вы ожидаете, будет прослушивать порт 80, он не работает. При явной попытке привязки к порту 80 (http://localhost:80/) возникает исключение. Если вы вызываете свое приложение от имени суперпользователя или root, вы можете явно привязаться к порту 80 (http://localhost:80/).
Я еще не изучил остальные члены HttpListener достаточно подробно, чтобы сделать какие-либо полезные комментарии о том, насколько хорошо он работает в среде linux. Однако, если будет интерес, я продолжу публиковать свои наблюдения.

chickenSandwich

26
ответ дан 30 November 2019 в 00:43
поделиться

Я не уверен, почему вы хотите заглянуть так глубоко в капюшон. Даже со стороны Microsoft документы о http.sys не могут дать вам действительно ценной информации, если вы используете .NET Framework.

Чтобы узнать, работает ли что-то на Mono достаточно хорошо, вы всегда должны загрузить его образ VMware или VPC и протестировать на нем свои приложения.

http://www.go-mono.com/mono-downloads/download.html

Хотя Mono стал гораздо более зрелым, чем несколько лет назад, мы не можем сказать, что он был протестирован достаточным количеством реальных приложений, таких как Microsoft.NET. Поэтому, пожалуйста, тестируйте свои приложения и присылайте найденные проблемы команде Mono.

Исходя из моего опыта, мелкие проблемы исправляются в течение нескольких дней, в то время как для крупных проблем требуется больше времени. Но поскольку исходный код Mono доступен, вы можете исправить его самостоятельно или найти хорошие обходные пути в большинстве случаев.

2
ответ дан 30 November 2019 в 00:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: