我有X个活动传感器连接到服务器,每次触发传感器时都会将数据插入数据库。我正在尝试做的是创建一个带有蓝色打印设备(svg)的Web界面,每当触发传感器时,除了数据库插入之外,我希望它在我的蓝图中显示某种警报。为此,我需要保持与服务器的开放连接。
我正在考虑使用网络套接字,但它可能有点过分,因为我只需要从服务器检索数据。但是每秒运行一次ajax调用听起来也不是很有效。还有其他选择吗?
谢谢
答案 0 :(得分:4)
一些可能的选择包括:
您最终使用的实际传输将取决于您对浏览器支持的要求以及您在服务器上使用哪种技术来处理这些请求。传输选择还可能取决于您的网络拓扑 - 您需要与哪些类型的负载平衡器集成,代理等。
客户端和服务器端都有许多库,其中许多库支持多种传输。
例如(不是详尽的清单):
IMO - Websockets对于此类问题 NOT 过度使用,并且很适合这种类型的应用程序。
答案 1 :(得分:3)
如果没有专门讨论框架或了解服务器后端运行的内容,我们可以考虑为前端考虑一些选项:
<强>的WebSockets 强>
Websockets是为双向通信而设计的,尽管有多少用户在不支持websockets的浏览器中浏览网页,这令人震惊。我总是建议这样做的后备,例如下面列出的其他方法。
<强> SSE 强>
SSE是一个HTML5规范,充其量仍然不稳定。当SSE事件触发时尝试在页面上滚动...在后端可能稍微容易一些,有时它会挂在客户端,因为它在运行DOM的同一个线程内运行。
长轮询
保持连接畅通。它不能很好地扩展PHP,但可以在后端使用Python + Twisted游戏,或者Node.Js
Good Old Ajax
保持您的请求很小,您仍然可以使用可扩展的解决方案。是的,完整的GET请求是最昂贵的,但在过去十年中推出的几乎所有浏览器都支持。值得注意的是,GET请求很容易通过更多硬件水平扩展。
在一个完美的世界中:
您可以将应用程序拆分为几个组件,在Nginx等反向代理之后运行。然后使用Node.Js + Socket.IO处理应用程序的实时方面。
另一种选择是使用小型Ajax请求,并为支持它的浏览器提供websocket支持。这是专门针对后端PHP的建议。
答案 2 :(得分:1)
我遇到了类似的问题并对此进行了大量研究。据我了解,有三个主要选择:
我认为websocket是您最好的选择,因为它可以在没有所有请求/响应开销的情况下提供事件的即时通信。最重要的是,这正是websockets的设计目标!因此,您可能必须使用此解决方案编写最少量的自定义代码。
答案 3 :(得分:1)
WebSocket肯定不会有点过分。反之。使用websockets,您可以拥有双向通信渠道;这意味着服务器可以在适当的时候启动通信(例如,当传感器数据发生变化时)。
在之前的项目中,我使用node.js和socket.io来监控50多个传感器。数据在浏览器中实时更新。使用smoothie.js可视化数据。 每当更新传感器值时,都会将其传达给浏览器。有些传感器每分钟只更新一次,其他传感器每秒更新一次...... 轮询会过度,因为它会检索所有传感器的所有数据,即使是那些尚未更新的传感器。
答案 4 :(得分:1)