好吧,我对这项技术有疑问,更准确地说是在它的实现方面,在互联网上找不到好的例子,因为它涉及 javascript 和 php,只是,你会有一些链接,我可以在其中找到这个东西真的有效吗?
我们正在开发一个站点,允许用户向其他用户发送半实时事件。当用户有新事件时,UI 将显示一个图标(非常标准的东西)。
我读过定期短轮询的扩展性不如 websockets,因为它给 web 服务器带来了更大的压力。我不太确定为什么会这样?
我们正在使用 tomcat NIO(每个线程比率没有一对一的连接)。据我了解,Tomcat NIO 非常擅长使用少量线程处理较长的 HTTP 连接超时。
因此,如果定期轮询时间小于连接超时,则轮询不应创建另一个 TCP 握手,因为它只会重用现有的 HTTP 1.1 连接。
因此,上述内容似乎不会对服务器造成太大压力。它可能不像长轮询或 websockets 那样实时,但我不明白为什么它不应该扩展(假设服务器可以快速响应指示新事件的响应——我们使用内存中的并发哈希图,所以这应该很快,没有必要的数据库访问)。
我错过了什么吗?
谢谢,-亚当
我正在尝试在我的Rails应用程序中实现一个彗星方法.我有以下内容:
def poll
records = []
start_time = Time.now.to_i
while records.length == 0 do
records = Something.find(:all,
:conditions => { :some_condition => false})
if records.length > 0
break
end
sleep 1
if Time.now.to_i - start_time >= 10
break
end
end
responseData = []
records.each do |record|
responseData << {
'something' => record.some_value
}
# Flag message as received.
record.some_condition = true
record.save
end
render :text => responseData.to_json
end
Run Code Online (Sandbox Code Playgroud)
现在,当我手动转到URL时,它会在那里等待10秒并按预期超时.如果我修改我的数据库以便Something.find()返回记录然后再次转到URL,则调用立即返回.
但是,如果我转到URL,然后我快速对数据库运行更新,以便Something.find()应该找到记录,它只是坐在那里直到它在10秒后超时.我希望在我做出更改并返回后,它应该立即看到对数据库的更改.
有什么想法吗?我也愿意接受有关改进的建议.
Comet 是一种架构风格,而 Websockets/HTTP Streaming/SSE/BOSH/Bayeux 是这种架构风格的不同实现吗?
我想在PHP中实现彗星 ...我知道ajax是如何工作的,但我试图研究使用彗星的长轮询服务器推送,但我面临问题,弄清楚它是如何工作的.所以,请你帮我...