我正在使用socket.io。有些用户向我发送消息"我无法发送消息,为什么?"。我研究了这个问题,猜测是防火墙还是防病毒软件阻止了网络套接字。如果浏览器不支持websocket,socket.io会自动切换到xhr轮询,这是没有问题的。但是,如果浏览器支持websocket,并且防病毒或防火墙正在阻止websocket时,socket.io不会切换到xhr,用户也无法发送消息。我该如何解决这个问题?
这是用户的websocket测试报告
http://websocketstest.com/result/244711
Websocket支持可以,数据接收没有。
您可以将Socket.IO设置为在配置中仅使用XHR轮询:
io.configure(function () {
io.set("transports", ["xhr-polling"]);
});
请参阅官方文档中的配置Socket.IO。
我发现很多用户最终都无法成功连接到socket.io。我没有试图不断诊断它,而是开始构建我的应用程序,使其易于使用ajax。事实上,我可以将useSocketIO的环境变量更改为false,整个网站、聊天、小费、图像共享都将回退到ajax。这并不能解决根本问题,但让我在无法传输丢失数据时省去了很多麻烦。
客户端上的伪代码
# check that I have a socket object
if socket != null
# if not connected, try to reconnect
if !socket.connected and !socket.connecting
attemptResetOfSocketIO()
# if now connected, send socket message
if socket.connected or socket.connecting
sendSocketMessage()
else
# not connected, send via ajax
sendAjaxMessage()
else
# no socket object, send via ajax
sendAjaxMessage()