3
如何使用socket.io创建实时搜索?我使用RethinkDB + Node + Express + Socket.io + Redux + React,我正在监听事件(它是使用rethinkdb创建的changefeed),它向我发送了10个项目,并使用反应显示它们。使用socket.io进行实时搜索
现在我想创建实时搜索,它发送查询到服务器,在数据库搜索结果,返回前10个结果,并将其发送给客户端socket.io
// emit events for changes
r.table('stackoverflow_questions')
.changes({ includeInitial: true, squash: true })
.limit(10)
.run(connection)
.then(changefeedSocketEvents(socket, 'topic'))
-
// Socket.io events for changefeed
module.exports = function (socket, entityName) {
return function (rows) {
rows.each(function (err, row) {
if (err) { return console.log(err) } else if (row.new_val && !row.old_val) {
socket.emit(entityName + ':insert', row.new_val)
} else if (row.new_val && row.old_val) {
socket.emit(entityName + ':update', row.new_val)
} else if (row.old_val && !row.new_val) {
socket.emit(entityName + ':delete', { id: row.old_val.id })
}
})
}
}
我不知道如何使用socket.io实现这一点,您是否必须为每个自定义查询动态创建自定义套接字事件侦听器? (这听起来荒谬的我,我想,应该有一个简单的方法)
使用网络套接字似乎有点矫枉过正。它最适合接收来自服务器的未经请求的消息。获得搜索结果不是主动提供,可能更简单地通过AJAX完成。 –
我使用网络套接字无论哪种方式...我认为,有比AJAX请求更快,我想实时更新数据。也许我可以创建rest api,并且只向客户端发送信息,新数据可用,所以浏览器会发送http请求来更新它,但它看起来是一个性能较差的解决方案。 – stpoa
另外我在meteor.js中创建了实时搜索,它使用DDP协议在websockets上工作,它工作得很好,所以我认为它应该是可行和高效的。 – stpoa