套接字.Emit在移动chrome中不工作(但它在隐身模式下工作)

socket.emit is not working in mobile chrome (but it works in incognito mode)

本文关键字:工作 模式 chrome 移动 套接字 Emit      更新时间:2023-09-26

我有一个应用程序使用套接字。io和socket.emit()不能从移动chrome(在Android和iOS上)工作。我可以看到socket.emit()正在浏览器中执行。但是我的服务器端console.log语句在socket.on()中没有运行,所以我认为消息没有到达那里。我在控制台也没有看到错误。

有趣的是,在隐身模式下一切都可以正常工作,以及在其他手机浏览器(如Safari)的所有模式下。

任何解决方案或调试帮助都是有帮助的。

编辑:

客户端代码

$(document).ready(function(){
    socket = io();
    $(".check").on("submit", function(event){
        event.preventDefault();
        ga('send','event','evt','evt123');
        socket.emit('checkRoom', { rId: "12345", pId: "johndoe"});
    });
});

服务器端代码

io.on('connection', function(socket) {
    console.log('a user connected');
    socket.on('check',function(e){
        console.log('Entered check');
        socket.emit('check','server message');
    });
});

EDIT2:

我在客户端手动指定了socket.io-1.3.5.js文件(而不是使用默认的/socket.io/socket.io.js),并开始在控制台中看到这个错误:

WebSocket connection to 'ws://mydomain.com/socket.io/?EIO=3&transport=websocket&sid=wr8UpsT45lrWHtpMACJs' failed: Error in connection establishment: net::ERR_CONNECTION_TIMED_OUT

一些移动网络通过80端口代理请求,这会破坏web套接字。这并不能解释为什么它可以在其他浏览器或隐身中工作,但是您可以通过将服务器和客户端移动到不同的端口来测试这个假设,例如。81.