Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/39.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 没有node.js服务器的客户端socket.io_Javascript_Node.js_Socket.io - Fatal编程技术网

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

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

要在客户端使用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编写的

因此,我将不得不考虑一种方法来解决我没有服务器这一事实

根据我的测试,
这种方法似乎有效,但我真的不知道幕后发生了什么。

虽然从技术上讲这是可行的,但我不明白你为什么需要这样做。如果您担心减少传输的数据量,那么除了保存在较短的
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
    发出XHR
    GET
    请求。服务器使用会话ID、配置的超时和支持的传输进行响应
  • 客户端选择用户浏览器支持的最佳传输。在现代浏览器中,它将使用WebSocket
  • 如果支持WebSocket,它将创建一个新的链接来启动WebSocket连接(HTTP
    GET
    with
    Upgrade:WebSocket
    header)到一个特殊URL–
    /socket.io/1/WebSocket/
  • 如果浏览器不支持WebSocket或连接失败(大量中介,如代理、过滤器、网络安全设备等,不支持WebSocket请求),库将返回XHR长轮询,并向
    /socket.io/1/XHR polling/
    发出XHR请求。在新消息可用或达到超时(此时客户端重复XHR请求)之前,服务器不会响应请求
  • io的服务器组件处理另一端的混乱。它处理
    /socket.io/
    下的所有URL、设置会话、解析WebSocket升级、实际发送消息以及一系列其他簿记

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

    我猜您的基于Java的服务器只是实现了WebSockets协议。您可以使用直接连接到它


    您的服务器可能确实实现了socket.io协议——有一些放弃的Java项目可以实现它——但这不太可能。与服务器的开发人员交谈,了解他是如何实现“socket服务器”的。

    NodeJS与其他服务器一样提供静态JS文件。这里没有魔法,几乎任何服务器都可以使用。回答得很好!爱它。答案比socketio本身更好:D