首页 > 解决方案 > 为什么socket.io在同一台电脑上使用两个不同的浏览器不起作用(我无法连接或页面仍然永远等待)

问题描述

我的简单测试代码是:index.html

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

<script>
 socket = io('http://localhost:2020'/*,{secure: true}*/);
</script>

注意:我删除了安全的真实。

app.js 节点js

var express = require('express'),
    app = express(),
    server = require('http').createServer(app),
    io = require('socket.io').listen(server),
    path = require("path");

app.use(express.static(__dirname + '/public'));
app.set('view engine', 'ejs');
app.set('views', path.join(__dirname, 'views'));

server.listen(2020);
 console.log("localhost:2020");

io.on('connection', function(socket) {
    console.log("in");
    socket.on('disconnect',function(data){
        console.log("out");
    });
});

当我在我的套接字服务器上使用 nodejs 测试简单连接时,如果我在不同的浏览器上打开一个新页面(新连接),例如 chrome 和 opera 上的其他实例,第二个实例不起作用或有阻塞,不要打开页面并且不调用socket.io服务器但是当我在chrome上打开一个新标签时,带有新连接的新标签工作正常......

注意:客户端页面不托管在 socket.io 服务器上,因为客户端页面托管在 apache 服务器上。

P1-我在Chome中打开index.html = 页面运行正常,socket连接正确

P2- 我在新的 Chrome 选项卡中打开 index.html = 页面正常运行并连接。

P3-我在隐身chrome中打开index.html或在Opera(其他浏览器)上打开=套接字未连接并且页面被阻止

P4-我做(刷新)我在 chrome(P2) 中打开的套接字,也就是说,我刷新了新的 chrome 选项卡。套接字服务器仍然被阻塞,甚至没有连接。

P5-我刷新(P1)的页面:=一切都已解锁,并且主页上的所有页面现在都被阻止了,现在可以正常连接到套接字

如果 index.html 托管在 NodeJS 之外,则会发生这种情况,但是例如,如果我创建托管在 Nodejs 视图中的 index.html,它不会通过,问题是我的应用程序被认为是加载到 nodejs 外部的小部件.

标签: node.jssocketsexpresswebsocketsocket.io

解决方案


安全选项适用于 https 连接,并且您正在尝试连接到 http。尝试删除安全选项。


推荐阅读