我希望在Raspberry Pi上托管基于C#/ mono / signalR的网页 - 这可能吗?
我设法编写了一个客户端 - 服务器 - 客户端解决方案,其中signalR集线器托管在运行IIS 8的PC上.pi上的控制台应用程序通过c#signalR客户端连接到服务器集线器。 asp.net服务器还托管一个“远程控制”页面,供浏览器客户端向pi发送命令,但现在我想要消除PC作为一项要求,并将所有内容托管在pi上。
答案 0 :(得分:14)
<强> TLDR 强>
长篇故事
我设法获得了一个解决方案,使用Nancy,SignalR和基于OWIN的网络服务器NoWin从Rasperry Pi上的控制台应用程序(单声道3,硬浮动)运行。请参阅此解决方案中的RPi.Nancy项目:
https://github.com/neutmute/RPi.Demo
与作为连接到IIS SignalR主机的纯客户端相比,作为自托管Web服务器的pi更加滞后。来自knockout.js绑定范围滑块的响应非常慢,需要几秒钟才能使更新流在服务器停止在客户端上移动后完成输入。在PC上运行相同的自托管服务器也会出现一些延迟,但不会像Pi那样慢。
在运行自托管信号R时,单个进程在拖动滑块并传输信号R事件流时会恢复97%。在使用IIS作为中心服务器的纯客户端模式下不会发生这种情况,但是当存在拖动滑块的情况时,IIS服务器确实会遇到高CPU使用率,因此pi可能会被忽略一段时间。
我还尝试Katana作为网络服务器,但它的运行速度甚至比NoWin慢。
请注意,完全自托管的SignalR解决方案可以正常工作,如果只是在这里和那里发送几个按钮 - 只有在来回拖动滑块并且生成连续的事件流时才会出现滞后现象。一种解决方案可能是通过敲除绑定来限制滑块的更新,并降低幻灯片事件的分辨率。
另外需要注意的是,在pi上托管时,SignalR不能使用Web套接字,因为只有在IIS 8上托管SignalR时才可以使用它。服务器端事件传输用于代替。在纯客户端模式下,这是相同的传输。