所以我有几个月前建立的另一个项目。它目前使用jquery和ajax并每隔30秒调用一次php脚本。 php脚本查询mysql并传回结果以显示。在这个应用程序中,该人员能够从数据库中添加/编辑/删除记录,当他们这样做时,数据库的结果列表需要更新他们看到的列表。到目前为止它似乎已经完成了这项工作,但是沿着这条道路向前看,数据库将变得越来越大,它需要更加实时,这意味着不仅要每30秒刷新一次,而且要尽可能瞬间刷新。
socket.io会解决这个问题吗?我是否只需使用socket.io和nodejs来创建服务器并发出事件来查询我的数据库并返回结果显示?然后在客户端只有一个函数,像每一秒调用服务器套接字脚本?这是使用socket.io的正确途径吗?如果我在服务器资源方面每秒都运行一次,那么这个过程是否会引起关注?
答案 0 :(得分:3)
socket.io会解决这个问题吗?
我的回答是socket.io / node.js在处理当前表单中的实时应用程序和PHP时要好得多。
然后在客户端就有一个 调用服务器套接字的函数 脚本像每一秒?
在node.js中,您不应该轮询请求信息,而应该将信息推送给您(使用redis pubsub或node.js事件)。我建议你在stackoverflow.com上查看我的a pubsub snippet来解释一下自己。要使代码生效,您需要安装socket.io 0.6.x(0.6.18),因为最新的socket.io 0.7.x有一个稍微不同的API。
像我之前所说的那样使用pubsub语义。例如,你可以使用:如果有的话会引起关注 这个过程,如果我每秒运行它 关于服务器资源?
答案 1 :(得分:2)
socket.io会解决这个问题吗?我是否只需使用socket.io和nodejs来创建服务器并发出事件来查询我的数据库并返回结果显示?然后在客户端只有一个函数,像每一秒调用服务器套接字脚本?这是使用socket.io的正确途径吗?如果我在服务器资源方面每秒都运行一次,那么这个过程是否会引起关注?
如果你想要实时的东西。结构可能不同。
首先,您需要一个帮助您在浏览器和服务器之间进行通信的中间人。
解决方案1:每30秒请求一次实时(与当前方法相同)
解决方案2:http Streaming。一旦请求到服务器。服务器可以继续向浏览器发送响应。由于许多安全浏览器问题,socket.io已经诞生。 Socket.io提供了许多方法流,htmlfile流,xhr请求,flash ...
其次,您需要服务器接受连接并进行长轮询服务。感谢上帝 ! socket.io为你完成了这部分。
第三,最重要的人!那是数据。解决方案1:每个请求/触发器调用db或nosql数据库(SQLserver,mysql,Mongodb)。相信我 !你的数据库很快就会死掉。
解决方案2:消息传递服务。像Redis pub / sub,rabbitQ这样的服务。它只是在队列中使用订阅和发布消息。它使用特定协议发布消息,并且它们不存储像db这样的消息。所以它可以发送消息> 100 k请求/秒!超级快。哇!是否使用此服务可以解决实时解决方案?不幸的是,有点难。为什么?因为使用这种服务你无法存储数据,SQL查询需要自定义你的数据。
解决方案3:内存中的进程.Redis,memcached。记忆力超快!您可以将最终显示结果存储在内存中。内存可以达到> 100 k请求/秒。
结论。构建一个真正的实时Web应用程序,如Facebook或tweeter。我们需要应用以上所有解决方案+一些作弊。例如,facebook朋友通知。当你获得朋友新闻更新时,它会使用消息传递服务向所有朋友发布警报(最多5000人)。因为大量发布会降低消息性能。之后缓存(Memcached)通知消息以减少调用db(mysql)。我们如何能够获得超过100万人的团体信息?当然,我们出版给100多万人。但我们要求100万人拨打我们最新的群组信息,这些信息存储在内存中。