cocos 遊戲打包Android 端和網頁端socketjs連接正常 ios 端socketjs不能連接問題
後臺spring服務器代碼如下
@Configuration
@EnableWebSocketMessageBroker
public class WebSocketConfig implements WebSocketMessageBrokerConfigurer {
private static Logger logger= LoggerFactory.getLogger(WebSocketConfig.class);
/**
* 設置心跳的時間間隔
*/
private final long HEART_BEAT=5000;
@Autowired
private JwtUtils jwtUtils;
@Autowired
private RedisUtils redisUtils;
@Value("${server.port}")
private Integer port;
@Autowired
private MessageSend messageSend;
/**
* 設置stomp協議的入口(EndPoint)
* 用於設置建立websocket連接
* @param registry
*/
@Override
public void registerStompEndpoints(StompEndpointRegistry registry) {
logger.info("用於設置連接websocket的入口地址,");
//設置連接websocket的開始前綴。前臺使用什麼來建立websocket通信。ws://localhost:端口/ws-start
registry.addEndpoint("/ws-start")
.setAllowedOrigins("*")//表示允許跨域請求,即允許所有的來源請求
.withSockJS();//使用SockJS進行通信(當瀏覽器不支持websocket,使用SockJS進行通信)
}
前端js如下
/**
* 建立連接
*/
cc.error(">>>>>>>:" + "建立連接");
// @ts-ignore
const socket = new SockJS(`http://landlordapi.tiangu95.com/tiangugame/landlord/ws-start`, undefined, {transports: ['websocket']});
this._stompCli = Stomp.over(socket);
this._stompCli.heartbeat.outgoing = 2000;
this._stompCli.heartbeat.incoming = 2000;
let _that = this;
this._stompCli.connect(
{token: cc.sys.localStorage.getItem(DBK.ACCESS_TOKEN)},
(frame) => {
this.subscribeTopic();
if (cc.director.getScene().name != ENUM_DDZ_SCENE.GAME) {
setTimeout(() => {
cc.director.loadScene(ENUM_DDZ_SCENE.GAME, () => {
this.sendEnterGame();
});
}, 1000);
}
cc.find("root/disTip").active = false;
cc.error(">>>>>>>:" + "連接成功")
},
(error) => {
cc.find("root/disTip").active = true;
// this.doConnect();
});
// this._stompCli.debug = (str) => {
// cc.log(">>>>>>::" + str);
// }
解決辦法找到SocketJs庫查找到 this.xhr.withCredentials = true; 註釋掉,解決
// this.xhr.withCredentials = true; //修復ios下無法連接的問題