Node.js RESTful服务器和socket.io的使用相互矛盾吗?
我正在开发一个具有普通路由和HTTP请求和响应的node/express RESTful服务器。现在我被要求扩展服务器,以便使用socket.io或类似的东西向客户端提供近实时数据 我觉得实时更新需要在服务器上进行客户机和服务连接管理和客户机状态管理,这本身与服务器的RESTful方面是正交的。对于客户机,要从RESTful服务器获取连续数据馈送,客户机必须对其进行“轮询”Node.js RESTful服务器和socket.io的使用相互矛盾吗?,node.js,sockets,express,restful-architecture,Node.js,Sockets,Express,Restful Architecture,我正在开发一个具有普通路由和HTTP请求和响应的node/express RESTful服务器。现在我被要求扩展服务器,以便使用socket.io或类似的东西向客户端提供近实时数据 我觉得实时更新需要在服务器上进行客户机和服务连接管理和客户机状态管理,这本身与服务器的RESTful方面是正交的。对于客户机,要从RESTful服务器获取连续数据馈送,客户机必须对其进行“轮询” 我的说法正确吗?如果没有,是否有提供这两个功能的模式?正确,RESTful服务与提供实时I/O所需的有状态客户端/服务器连
我的说法正确吗?如果没有,是否有提供这两个功能的模式?正确,RESTful服务与提供实时I/O所需的有状态客户端/服务器连接相反。如果不知道在I/O中谈论RESTful会花费大量数据。不,没有矛盾。每个HTTP请求都需要一个往返的设置过程,如果您支持SSL(您应该这样做),或者执行大多数形式的身份验证,则需要进行更多的设置。通过保持连接处于打开状态并经过身份验证,Socket.io允许您最小化这些设置,以便为下一个请求做好准备。您可以按照规范第8.2.3节的要求,对100 Continue标题进行一些奇特的操作: 但是,只要在socket.io上执行正常的RESTful https pull请求,就可以最大限度地减少重新建立连接的需要,从而显著降低延迟。当然,实现完全服务器推送支持将进一步降低延迟
折衷的办法是增加复杂性(虽然socket.io可以在Express中以几行代码实现),并通过保持sockets打开来增加内存消耗。事实上,如果用户数量有限,您可能想看看IMO,WebSocket的使用本质上与REST并不矛盾,但该技术的许多使用方式(如您所描述的服务器保存状态的方式)都是错误的。看见