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