gpt4 book ai didi

javascript - 没有 node.js 服务器的客户端 socket.io

转载 作者:IT老高 更新时间:2023-10-28 23:18:03 41 4
gpt4 key购买 nike

要在客户端使用socket.io,通常我们启动一个node.js服务器,然后这样:

<script src="/socket.io/socket.io.js"></script>

或使用特定端口:

<script src="http://localhost:3700/socket.io/socket.io.js"></script>

问题是:

是否需要使用node.js服务器来服务socket.io.js?

...或者是否有可能

制作一个 socket.io.js 的本地副本,而不是每次我们需要 socket.io 时都去服务器?


就像,我们去查看源代码并复制我们从脚本标签源获得的所有内容,

粘贴并保存为socket.io-local.js,以便我们下次使用:

<script src="socket.io-local.js"></script>

这行得通吗?


更新

感谢大家的好评,

我问这个是因为在我参与的情况下,我实际上没有访问服务器的权限:

我正在编写客户端以连接到其他开发人员用 Java 编写的 Socket Sever。

因此,我必须想办法解决我没有服务器的事实。

根据我一直在测试的结果,这种方式似乎可行,但我真的不知道幕后发生了什么。

最佳答案

您显然可以在任何地方托管 socket.io 客户端库并将其拉入页面。但是,几乎可以肯定它不适用于您的基于 Java 的服务器。

要了解原因,您需要了解 socket.io 真正在幕后做什么;客户端库只是其中的一小部分。

Socket.io 实际上定义并实现了its own protocol用于浏览器和服务器之间的实时通信。它以支持多个传输的方式这样做:例如,如果用户的浏览器或代理不支持 WebSockets , 它可以回退到 long polling .

socket.io 客户端实际做的是:

  1. 制作 XHR GET请求 /socket.io/1 .服务器使用 session ID、配置的超时和支持的传输进行响应。
  2. 客户端选择用户浏览器支持的最佳传输方式。在现代浏览器中,它将使用 WebSockets。
  3. 如果支持 WebSockets,它会创建一个新的 WebSocket 启动 WebSocket 连接(HTTP GET 带有 Upgrade: websocket header )到一个特殊的 URL – /socket.io/1/websocket/<session id> .
  4. 如果浏览器不支持 WebSocket 或连接失败(有很多中间媒介,如代理、过滤器、网络安全设备等不支持 WebSocket 请求),库将回退到 XHR 长轮询,并向 /socket.io/1/xhr-polling/<sesion id> 发出 XHR 请求.直到有新消息可用或达到超时,服务器才会响应请求,此时客户端会重复 XHR 请求。

Socket.io 的服务器组件处理困惑的另一端。它处理 /socket.io/ 下的所有 URL ,设置 session ,解析 WebSocket 升级,实际发送消息,以及一堆其他的簿记。

如果没有 socket.io 服务器提供的所有服务,客户端库就毫无用处。它只会向服务器上不存在的 URL 发出 XHR 请求。

我的猜测是您的基于 Java 的服务器只是实现了 WebSockets 协议(protocol)。您可以使用 the browser-provided WebSocket APIs 直接连接到它。 .

可能您的服务器确实实现了 socket.io 协议(protocol)——有一些废弃的 Java 项目可以做到这一点——但这不太可能。与您的服务器的开发人员交谈,了解他是如何实现“套接字服务器”的。

关于javascript - 没有 node.js 服务器的客户端 socket.io,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19506735/

41 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com