Raspberry Pi上的自托管SignalR可以工作吗?

我希望在Raspberry Pi上托管基于C#/ mono / signalR的网页 – 这可能吗?

我设法编写了一个客户端 – 服务器 – 客户端解决方案,其中signalR集线器托管在运行IIS 8的PC上.pi上的控制台应用程序通过c#signalR客户端连接到服务器集线器。 asp.net服务器还为浏览器客户端提供了一个“远程控制”页面,用于向pi发送命令,但现在我想要消除PC作为一项要求并将所有内容托管在pi上。

TLDR

可以办到! video 代码 。

很长的故事

我设法找到了一个解决方案,使用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套接字,因为它们仅在SignalR托管在IIS 8上时可用。服务器端事件传输被替代使用。 在纯客户端模式下,这是相同的传输。