我有X个活动传感器连接到服务器,每次触发传感器时都会将数据插入数据库。我想要做的是创建一个带有蓝牙打印设备(svg)的web界面,并且每当传感器被触发时,除了db插入之外,我希望它在我的蓝图中显示某种警报。为此,我需要保持与服务器的开放连接。关于哪种技术用于实时通知的建议
我正在考虑使用网络套接字,但它可能是矫枉过正,因为我只需要从服务器检索数据。但是,每秒钟运行一次ajax调用听起来都不是很有效。还有其他的选择吗?
谢谢
我有X个活动传感器连接到服务器,每次触发传感器时都会将数据插入数据库。我想要做的是创建一个带有蓝牙打印设备(svg)的web界面,并且每当传感器被触发时,除了db插入之外,我希望它在我的蓝图中显示某种警报。为此,我需要保持与服务器的开放连接。关于哪种技术用于实时通知的建议
我正在考虑使用网络套接字,但它可能是矫枉过正,因为我只需要从服务器检索数据。但是,每秒钟运行一次ajax调用听起来都不是很有效。还有其他的选择吗?
谢谢
一些可能的选择包括:
您最终使用哪种实际传输将取决于您对浏览器支持的要求以及您在服务器上使用哪些技术来处理这些请求。运输选择还可能取决于您的网络拓扑结构 - 您需要与哪些类型的负载平衡器集成,代理服务器等。
客户端和服务器端都有很多库,其中许多都支持多个库这些运输。
例如(不是穷举性列表):
IMO - 的WebSockets是不矫枉过正这种类型的问题,也会很好地借给自己这种类型的应用。
我有类似的问题,并做了大量的研究。据我了解,主要有三个选项:
我想的WebSocket是您最好的选择,因为它可容纳该事件的直接通信,而所有的请求/响应的开销。最重要的是,这正是websocket设计的目的!因此,您可能必须使用此解决方案编写最少量的自定义代码。
WebSocket当然不是矫枉过正。反之。使用websockets,你有一个双向通信通道;这意味着服务器可以在看起来合适的时候启动通信(例如,当传感器数据发生变化时)。
在之前的项目中,我使用node.js和socket.io一起来监视50多个传感器。数据在浏览器中实时更新。数据使用smoothie.js可视化。 每当更新传感器值时,都会将其传递给浏览器。有些传感器每分钟更新一次,其他传感器每秒更新一次,... 轮询本来就是过量的,因为它会检索所有传感器的所有数据,即使是那些尚未更新的传感器。
没有具体讨论框架或知道什么是您的服务器(S)的后台运行的,我们有几个选择可以考虑针对前端:
的WebSockets
的WebSockets设计为双向通信,尽管有多少用户在不支持websocket的浏览器上浏览网页令人震惊。我总是建议为此做一个回退,比如下面列出的其他方法。
SSE
SSE是HTML5规范,充其量仍是摇摇欲坠。尝试在页面上滚动时,当SSE事件触发时...在后端可能会稍微简单一些,因为它在与运行DOM相同的线程内运行,所以它有时会挂在客户端。
长轮询
保持您的连接打开。它不与PHP和Python +扭曲的后端很好地扩展,但执行顺顺当当,或Node.js的
好老阿贾克斯
保持您的要求小了,你仍然有一个可扩展的解决方案。是的,完整的GET请求是最昂贵的,但在过去十年中推出的每个浏览器都支持。同样值得注意的是GET请求很容易通过更多硬件水平扩展。
在一个完美的世界:
您将您的应用程序分解成几个组成部分,后面的反向代理,如Nginx的操作。然后使用Node.Js + Socket.IO处理您的应用的实时方面。
另一种选择是使用小的Ajax请求,并为支持它的浏览器提供websocket支持。这是专门针对PHP后端的建议。
你有AJAX长轮询,这将最终效率与你的案例中的网络套接字一样高效;假设传感器不经常启动。 WebSockets不是“过度杀伤”,我会说,假设有少量用户,AJAX请求不会太低效。 – Matt
也许http://signalr.net/ – Raidri
我也建议signalr.net ..现在在测试,但它太好... –