Php 如何像facebook ticker、meetup.com主页那样显示持续的实时更新?
如何在像facebook ticker这样的浏览器中显示持续的实时更新,meetup.com主页是这样做的?在python、PHP、node.js中,对服务器端的性能有什么影响?Php 如何像facebook ticker、meetup.com主页那样显示持续的实时更新?,php,python,node.js,asynchronous,real-time,Php,Python,Node.js,Asynchronous,Real Time,如何在像facebook ticker这样的浏览器中显示持续的实时更新,meetup.com主页是这样做的?在python、PHP、node.js中,对服务器端的性能有什么影响? 此外,如果页面由akamai等CDN缓存,我们如何实现相同的更新呢?您可以使用轮询、长轮询或推送系统。最简单的方法是投票。但是,所有解决方案都需要客户端编码 性能影响取决于您的解决方案。最容易实现的是投票。一个短频率的民意测验有效地每100毫秒模拟一次请求。长时间的民意测验影响较小,但它会在或多或少的时间内保留大量的请
此外,如果页面由akamai等CDN缓存,我们如何实现相同的更新呢?您可以使用轮询、长轮询或推送系统。最简单的方法是投票。但是,所有解决方案都需要客户端编码 性能影响取决于您的解决方案。最容易实现的是投票。一个短频率的民意测验有效地每100毫秒模拟一次请求。长时间的民意测验影响较小,但它会在或多或少的时间内保留大量的请求。 这些是实现Comet的方法 我建议使用Socket.io,它是用Node.js实现的
因为它利用了最佳可用连接方法,所以我建议使用SockJS或socket.io作为客户端JavaScript库来实现类似套接字的连接,然后在服务器端使用Tornado将任何状态更改发布到客户端。代码相当简单 客户端代码取决于您选择的库。SockJS或SocketIO。或者,如果您只想直接使用WebSocket,则非常简单:
update_socket = new WebSocket("ws://my_server.com/listening_url");
update_socket.onmessage = function (evt) {
$("#my_div").html(evt);
};
服务器端代码也非常简单:
import tornado
class UpdateHandler(tornado.websocket.WebSocketHandler):
def open(self):
self.write_message('Hi client')
# listen for some events that are occurring
for message in function_that_generates_events():
self.write(message)
def on_message(self, message):
# Do something with incoming messages
def on_close(self):
# tidy up
app = tornado.web.Application(('r/listening_url',UpdateHandler))
app.listen(9000)
您有两个选项(其他人在上面详细介绍了这两个选项)。如果您不熟悉每个选项背后的一些概念性想法,我想我会给出一两行关于它们的建议。请注意,我在非常非常高的层次上介绍这些概念
你的三个选择是:
Client: Do you have a message for me?
Server: No.
Client: (wait x seconds)
Client: Do you have a message for me?
Server: No.
Client: (wait x seconds)
Client: Do you have a message for me?
Server: Yes. Here it is!
Client: Yay!
Client: (update message)
代表客户机的持续唠叨称为轮询。为了实现这种结构,您需要将服务器设置为“侦听”来自客户端的这些轮询请求。服务器还必须将这些消息存储在某个地方,以便在消息准备就绪时,服务器可以传递它们。在非常高的简化级别上,您的服务器需要:
- 接受一般web请求
- 接受轮询请求
- 运行获取消息的后台作业
- 将这些消息存储在某个位置,以便当轮询请求传入时,服务器可以检查它们
- 与WebSocket兼容的浏览器(并非所有浏览器都兼容)
- 可以处理web套接字的服务器(不确定如何表达,但并非所有服务器都是为这种安排而设置的)
- 客户端维护到Web套接字的连接,并启用到服务器的连接
- 服务器通过web套接字将结果推送到客户端
- 客户端根据结果更新页面