我希望编写一个小型Web服务以在小型Linux机器上运行。我更喜欢用C#编写代码,因此我希望使用Mono。
我不希望运行完整的Web服务器或Mono的ASP.NET版本的开销。我正在考虑使用一个进程处理每个客户端连接的线程。线程之间而不是数据库之间的共享内存。
我已经阅读了一些有关Microsoft的HttpListener版本以及它如何与Http.sys驱动程序一起使用的信息。 Mono,Mono关于此类的文档只是自动化的类界面,而没有讨论它在幕后的工作方式。 (Linux没有Http.sys,因此我认为它的实现方式大不相同。)
谁能指出我一些讨论此模块的资源?
非常感谢Bill,billpg.com
(对于感兴趣的人,我的问题有一些背景知识。)
前段时间,我问了this question,他有兴趣与许多来回对象保持长时间的对话。我已经决定设计自己的即席协议(protocol),但是与我交谈的人确实想要REST接口(interface),即使是以“确定,立即发送命令”信号为代价。
因此,我想知道如何在Linux/Mono服务器上运行ASP.NET,但偶然发现了HttpListener。这似乎很理想,因为每个“对话”都可以在单独的线程中运行。在循环中调用HttpListener的线程可以查找每个传入连接所针对的线程,并将引用传递给该线程。
ASP.NET驱动的服务的替代方法是让ASPX代码从数据库中获取状态,并在完成后写回新状态。是的,它可以工作,但是这会带来很多开销。
最佳答案
你好,
Mono中的HttpListener类可以正常工作。我认为它在MS环境和Linux环境中的使用之间最显着的区别在于,如果没有root/su/sudo安全性,则无法绑定(bind)端口80。其他端口没有此限制。例如,如果您指定前缀:http://localhost:1234/
,则HttpListener会按预期工作。但是,如果添加前缀http://localhost/
(希望在端口80上侦听),则它会静默失败。如果您明确尝试绑定(bind)到端口80(http://localhost:80/),则会引发异常。如果您以 super 用户或 super 用户身份调用应用程序,则可以显式绑定(bind)到端口80(http://localhost:80/)。
我还没有足够详细地探讨其余HttpListener成员,以便对它在Linux环境中的运行情况做出任何有用的评论。但是,如果有兴趣,我将继续发表我的看法。
鸡肉三明治
关于c# - HttpListener在Mono上工作良好吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2923966/