2017-02-18 10 views
2

socket.io (1.4.5)를 사용하여 websocket 연결을 설정하는 앱이 있습니다. 이 앱은 웹 URL을 통해 사용할 수 있으며 Trigger.io를 사용하여 패키지 된 Android 앱으로 사용할 수도 있습니다.하이브리드 응용 프로그램 내에서 websocket 연결을 만드는 중 오류가 발생했습니다.

Android 앱에서 내 웹 소켓 서버에 연결할 수 없습니다. 이것은 내가

WebSocket connection to 'wss://myserver.com/socket.io/?user_id=xxx&session_token=xxx&EIO=3&transport=websocket' failed: Unspecified reason 

doOpen() 방법 내에있는 socket.io 클라이언트에 참조하는 행을받는 오류입니다.

this.ws = BrowserWebSocket ? new WebSocket(uri) : new WebSocket(uri, protocols, opts); 

나는 알고있는 한 websocket 서버를 변경하지 않았습니다. 그리고 웹 사이트 자체가 잘 실행되고 websocket 서버에 연결할 수 있습니다.

Chrome Devtools를 사용하여 Trigger.io Android 앱을 검사했으며 수동으로 websocket 서버에 연결하려고하면 같은 오류가 발생합니다. 다음 코드 줄은 작동하지 않습니다.

new WebSocket("wss://myserver.com/socket.io/?user_id=xxx&session_token=xxx&EIO=3&transport=websocket") 

Chrome 브라우저에서 동일한 코드 행을 실행해도 문제가 없습니다.

또한 오류 응답이 너무 빨라 보입니다. 하이브리드 응용 프로그램 내의 웹보기가 연결하려고하지 않는 것 같습니다. 응답은 websocket 서버가 실행 중인지 여부와 동일합니다. 말도 안되는 URL을 입력하면 같은 오류가 발생합니다.

new WebSocket("wss://blahblah"); //gives the same error and response immediately 

트리거 앱의 Chrome 버전은 55.0.2883.91입니다.

EDIT : 앱을 실행하는 기기의 모바일 브라우저에서 websocket 연결을 테스트하여 프록시/연결 문제가 아닌지 확인했습니다. 그리고 그것은 잘 작동했습니다.

+1

다른 서버에 연결할 수 있습니까? 안전한 연결 없이도 시도해보고 어딘가에 연결할 수 있는지 확인하십시오. – Janne

+1

@Janne 작업을 알고있는 두 개의 다른 소켓 서버에 연결을 시도했지만 여전히 같은 오류가 발생하지 않았습니다. – JohnP

+1

이 게시물을 확인하십시오 http://stackoverflow.com/questions/16675450/support-for-websockets-on-android – Janne

답변

1

이 해결책은 트리거에서 httpd 모듈을 사용하는 것입니다.

httpd 서버를 설정하면 contents : 또는 file : 프로토콜 대신 URL이 http://localhost으로 제공됩니다. 이를 통해 Chrome CSP에서 연결을 차단하는 문제가 모두 해제됩니다.

모듈 문서 : https://trigger.io/modules/httpd/current/

관련 문제