我有一个使用socket.io的应用程序,但是在移动端Chrome(Android和iOS)上无法使用
socket.emit()
。我可以看到浏览器中执行了socket.emit()
,但是我的服务器端socket.on()
中的console.log语句没有运行,因此我认为消息没有传递到那里。控制台中也没有错误信息。
有趣的是,在隐身模式下一切正常,而且其他移动浏览器(如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');
});
});
更正2:
我在客户端手动指定了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
socket.emit
在客户端起作用的?你是否在它之前或之后放置了一个console.log
?你仍然在服务器上收到 "a user connected" 的消息,这意味着 socket 已连接,但来自客户端的 emit 没有被接收到吗?尝试在服务器和客户端上都放置一些socket.emit/on('test')
(带有适当的控制台日志消息),触发它们而不需要任何交互,以查看通信是否至少在第一次联系时发生,或者问题是否开始出现。 - laggingreflexsocket.emit
。我尝试使用非常简单的代码来检查第一个联系是否发生,但我可以看到消息没有到达服务器。 - Deepak Joy Cheenath