我正在使用Node.js和Express构建搜索应用,我想添加一个自动完成功能。以前我用过Socket.io来构建一个聊天应用程序,所以Socket.io首先出现在我脑海里。
但我做了一些研究,看起来很多人都在使用AJAX进行自动完成,那么这两种实现有什么区别?
我对TCP和HTTP协议没有太多经验,所以我非常感谢明快而简单的新手答案:)
答案 0 :(得分:3)
Socket.io/Websockets主要用于服务器和客户端之间的实时交互。 Socket.io还需要持续连接和更多设置,以使服务器响应单个客户端。无论哪种方式,速度将主要取决于服务器处理。在搜索自动完成的情况下,您实际上向服务器发送请求并期望将单个响应发送回请求客户端,我个人会使用AJAX路由。这个问题有一些很好的答案,详细介绍了这一点:What is the disadvantage of using websocket/socket.io where ajax will do?
答案 1 :(得分:3)
首先,您的用例是创建自动完成功能。那意味着什么?这意味着当您在输入字段中插入一个字母时,您将要求服务器使用您要查找的术语来接收所有自动完成值。
作为开发人员,当您阅读此功能详情时,您应该记住event
事件中的keypress
一词。因此,每次触发此事件时,您都希望请求服务器获取自动完成列表。
你有什么可能做到的?
这种类型的场景中最常用的是简单的ajax
调用,它将发送请求,完成后将使用相应的详细信息更新自动完成。正如我们在这种情况下看到的每个字母的类型,可能会发出一个请求(通常可以实现debounce function
)以减少调用次数。这里好的想法是,一旦收到你的详细信息,你就会关闭连接,并且有数百万个jquery
的插件正在做这件事。
第二种方法是使用socket.io
这也是一个可行的选项,您将打开一次连接,并且对于每个keypress event
,您将发出获取详细信息,这通常会更快,因为您将重复使用现有的连接。这里的关键是你需要自己创建它我不知道任何使用socket.io实现autocomplete
的插件。
<强>结论强>
<强> Socket.io 强>
socket.io
的情况<强>的Ajax 强>
socket.io