2

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

  • 获取/动物
  • 获取/动物/[id]
  • 发布/动物

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

  • 发射(“动物:阅读”)
  • 发射(“动物:阅读”,{id:asdasd})
  • 发射(“动物:写”,动物数据)

还是我应该“只”使用 socket.io 将数据推送到客户端?

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

服务器:

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 个套接字。

4

3 回答 3

2

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

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

于 2013-01-15T10:15:20.263 回答
1

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

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

此外,AJAX如果您想在其他系统中重用您的代码,它会更好地与现有的庞大工具生态系统一起工作。

话虽如此,如果您需要WebSocket将数据推送到客户端或进行某种广播等功能,您可能会考虑使用socket.io而不是,AJAX因为很难实现这一点AJAXsocket.io提供这些功能。

于 2013-01-15T04:09:17.417 回答
1

我会为此使用 ajax,它基于 http 的数据请求,不是实时的。

于 2013-01-15T03:30:24.167 回答