我在 socket.io 开发中遇到了一个非常奇怪的问题。
一切都工作正常(向/从服务器发出),除了从3G连接服务器执行以下操作:
console.log( io.sockets.adapter.rooms['thisroom'] )
几乎每次,这一行都会返回一种"未定义"的类型,就好像在给定的"thisroom"房间中没有连接插座,而实际上有插座连接到房间。
如果从 WIFI 连接执行相同的代码,在相同的情况下,连接相同的套接字,则上面的行返回类似以下内容:
房间 { 插座: { '/#wEkHFuAhbCEf1Dw2AAAC': 真 }, 长度: 1 }
这是正确的。
我已经尝试了所有方法:
已尝试 socket.io 版本 1.3.7
socket.io 1.4.8版尝试
尝试连接
var socket = io.connect("http://<ip>:8081");
尝试仅使用以下方式强制到 websocket 传输:
var socket = io.connect("http://<ip>:8081", {transports: ['websocket']});
尝试将两个传输方式用作:
var socket = io.connect("http://<ip>:8081", {transports: ['websocket', 'polling']});
什么都没用。
这真的很奇怪,因为有时,重新启动应用程序时,3G连接会按预期工作。但大多数时候,它确实有效。
想法?
我只是通过使用带有 SSL 的安全连接设法使其工作。在SSL下,io.sockets.adapter.rooms['thisroom']每次在任何3G连接中都可以工作。