Javascript 没有node.js服务器的客户端socket.io
要在客户端使用socket.io,通常我们启动一个node.js服务器,如下所示:Javascript 没有node.js服务器的客户端socket.io,javascript,node.js,socket.io,Javascript,Node.js,Socket.io,要在客户端使用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
<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编写的 因此,我将不得不考虑一种方法来解决我没有服务器这一事实 根据我的测试,
这种方法似乎有效,但我真的不知道幕后发生了什么。虽然从技术上讲这是可行的,但我不明白你为什么需要这样做。如果您担心减少传输的数据量,那么除了保存在较短的
src
标记中的几个字符之外,这种更改实际上不会有多大作用。仅仅改变JS文件在服务器上的位置实际上并不能提高性能——必须发送JS
正确的缓存(Socket.IO有)将返回一个304 Not Modified(并且不会在每次加载页面时重新发送JS文件)
socket.io服务器自动将socket.io-client的独立构建公开为/socket.io/socket.io.js
。或者,您可以提供位于的根目录下的文件socket.io client.js
我有一个名为socket.io的模块,它实际上包装了socket.io。我需要提供自定义客户端脚本以及socket.io客户端脚本,但我不希望模块的每个用户都必须在其页面上包含多个脚本引用
我发现,安装后,您可以通过以下方式从socket.io提供生成的客户端脚本。因此,我的模块为自己的URL添加了一个侦听器,当它为我的自定义客户端脚本提供服务时,它也为socket.io客户端脚本提供服务。中提琴!我的模块用户只需一个脚本参考:)显然,您可以在任何地方托管socket.io客户端库,并将其拉入页面。但是,它几乎肯定不会在基于Java的服务器上运行
要了解原因,您需要了解socket.io在幕后到底在做什么;客户端库只是其中的一小部分
io实际上定义并实现了浏览器和服务器之间的实时通信。它以一种支持多个传输的方式来实现这一点:例如,如果用户的浏览器或代理不支持,它可以退回到
socket.io客户端实际执行的操作是:
/socket.io/1
发出XHRGET
请求。服务器使用会话ID、配置的超时和支持的传输进行响应GET
withUpgrade:WebSocket
header)到一个特殊URL–/socket.io/1/WebSocket/
)/socket.io/1/XHR polling/
发出XHR请求。在新消息可用或达到超时(此时客户端重复XHR请求)之前,服务器不会响应请求/socket.io/
下的所有URL、设置会话、解析WebSocket升级、实际发送消息以及一系列其他簿记
如果没有socket.io服务器提供的所有服务,客户端库将毫无用处。它只会向服务器上不存在的URL发出XHR请求
我猜您的基于Java的服务器只是实现了WebSockets协议。您可以使用直接连接到它
您的服务器可能确实实现了socket.io协议——有一些放弃的Java项目可以实现它——但这不太可能。与服务器的开发人员交谈,了解他是如何实现“socket服务器”的。NodeJS与其他服务器一样提供静态JS文件。这里没有魔法,几乎任何服务器都可以使用。回答得很好!爱它。答案比socketio本身更好:D