对于大多数请求使用socket.io是不是很糟糕,还是应该只使用它来将数据推送到客户端?

时间:2013-01-15 03:21:00

标签: javascript ajax node.js socket.io

替换AJAX路由(用jquery中的$ .Ajax调用)是不好的,例如:

  • GET / animals
  • GET / animals / [id]
  • POST / animals

使用socket.io事件(在客户端和服务器上绑定事件,以便客户端可以获得响应):

  • 发射( “动物:读”)
  • emit(“animals:read”,{id:asdasd})
  • emit(“animals:write”,animalData)

或者我应该“仅”使用socket.io将数据推送到客户端?

[编辑] 如果我不使用socket io作为我的POST路由,我可以看到一个问题。问题是我无法轻松使用客户端套接字来广播数据:

服务器:

on("animals:write", function(data){ 
    saveAnimal(req.data)
    socket.broadcast(...)
    emit("animals:write", writenAnimal)  
})

VS

app.post(function(req,res){
    saveAnimal(data)
    // cant broadcast :(
    res.send(201,writenAnimal)
})

我会在其他一些请求中将数据推送到客户端,所以所有客户端都至少有1个套接字。

3 个答案:

答案 0 :(得分:1)

如果您不想将数据推送到客户端,我不明白您为什么要使用socket.io而不是AJAX。我的意思是AJAX你不需要处理与客户端的会话,它可能会更好地扩展。

对于socket.io,对于每个连接的客户端,您需要服务器上的某种对象与该客户端配对。如果不必要或不需要永久连接,它将无缘无故地在服务器上使用更多内存。

此外,如果您希望将代码重新用于其他系统,AJAX会更好,它正在使用庞大的现有工具生态系统。

话虽如此,如果您需要WebSocket功能,例如将数据推送到客户端或进行某种广播,您可以考虑使用socket.io代替AJAX,因为它将是很难通过AJAXsocket.io提供这些功能来实现这一目标。

答案 1 :(得分:1)

如果您想要为您的网站提供实时数据,请使用恕我直言socket.io。以Stackoverflow为例。它使用websocket实时更新您的分数并更新您的通知。

但是如果你真的想要创建SEO友好的应用程序(我的意思是支持http来提供你的页面),如果你意识到在socket.io中管理会话和权限的困难,那就更重要了,我认为您的网页更喜欢AJAX而其他实时数据更喜欢socket.io

答案 2 :(得分:0)

我会使用ajax,基于http的数据请求,没有实时。