<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真正在幕后;客户端库只是其中的一小部分.
Socket.io实际上定义和实现了its own protocol,用于浏览器和服务器之间的实时通信.它以支持多种传输的方式执行此操作:例如,如果用户的浏览器或代理不支持WebSockets,则可以回退到long polling.
socket.io客户端实际做的是:
>为/socket.io/1发出XHR GET请求.服务器响应会话ID,配置超时和支持的传输.
>客户端选择用户浏览器支持的最佳传输.在现代浏览器中,它将使用WebSockets.
>如果支持WebSockets,它将创建一个新的WebSocket
,以启动WebSocket连接(具有升级的HTTP GET:websocket头)到特殊URL – /socket.io/1/websocket/\u0026lt;session id> ;.
>如果浏览器不支持WebSockets或者无法连接(除了不支持WebSocket请求的代理,过滤器,网络安全设备等外,还有许多中间人),该库将退回到XHR长轮询,并向/socket.io/1/xhr-polling/\u0026lt;sesion id>发出XHR请求.在新消息可用或达到超时之前,服务器不响应该请求,客户端在此时会重复XHR请求.
Socket.io的服务器组件处理这个混乱的另一端.它处理/socket.io/下的所有URL,设置会话,解析WebSocket升级,实际发送消息和一堆其他簿记.
如果没有由socket.io服务器提供的所有服务,客户端库就没用了.它只会对您的服务器上不存在的URL发出XHR请求.
我的猜测是,您的基于Java的服务器只是实现了WebSockets协议.您可以使用the browser-provided WebSocket APIs直接连接到它.
您的服务器可能确实实现了socket.io协议 – 有几个被遗弃的Java项目可以实现 – 但这不太可能.与服务器的开发人员交谈,了解他如何实现“套接字服务器”.