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