플러그인을 사용하여 1.10 besthttp
U3D 버전 : 5.4.0
코드 : 온라인 코드를 찾고, 자신의 게으른 단지에서 간단한 테스트를 작성하지 않았다
사용 은 System.Collections 단계; 사용 System.Collections.Generic 단계; 사용 UnityEngine 단계; 사용 BestHTTP 단계; 사용 BestHTTP.WebSocket 단계; 사용하여 시스템; 사용 BestHTTP.Examples 단계; 사용 UnityEngine.UI 단계; 사용 System.Text 단계; 공공 클래스 WSMgr : MonoBehaviour { // 공공 문자열 URL = "WS : // localhost를 : 8080 / WEB1 / 웹 소켓"; [SerializeField] 전용 문자열 URL; 공공 InputField의 MSG; 공공 텍스트 콘솔; 은밀한웹 소켓 웹 소켓, 개인 무효 시작 () { 은 init (); 인쇄 ( " 실행 " ); // WebSocket1 (); } 무효 업데이트 () { 인쇄 (webSocket.IsOpen을); } 무효 WebSocket1을 () { 웹 소켓 웹 소켓 = 새로운 새로운 웹 소켓 ( 새로운 새로운 열린 우리당 (URL을)); // webSocket.OnOpen ... // 등록 이벤트 후, 우리는 연결을 시작할 수 있습니다 ; webSocket.Open을 () // 이 단계 이후에, 우리가하는의 OnOpen 이벤트를 우리가 수 있습니다 받게됩니다 서버에 메시지를 보내기 시작 webSocket.Send ( " 서버에 메시지 " ); 바이트 [완충액 = 새로운 바이트 [ 1024 ]; webSocket.Send (버퍼); // 所有通信完成之后,就关闭连接 webSocket.Close (); } 개인 공극 초기화 () { 웹 소켓 = 새로운 웹 소켓 ( 새로운 열린 (URL)); webSocket.OnOpen + = 의 OnOpen; webSocket.OnMessage + = OnMessageReceived; webSocket.OnError + = 의 OnError; webSocket.OnClosed + = OnClosed; webSocket.Open (); 인쇄 ( " 执行这里" ); } 개인 공극 antiInit () { webSocket.OnOpen = 널 ; webSocket.OnMessage = 널 ; webSocket.OnError = 널 ; webSocket.OnClosed = 널 ; 웹 소켓 = 널 ; } 개인 무효 setConsoleMsg ( 문자열 MSG) { console.text =" 메시지 : " + MSG; } 공공 무효 연결 () { webSocket.Open (); 프린트 (웹 소켓 ! = null이 ); } 전용 바이트 [] getBytes ( 문자열 메시지) { 바이트 [완충액 = Encoding.Default.GetBytes (메시지); 리턴 버퍼; } 공공 무효 보내기 () { webSocket.Send (msg.text); } 공공 무효은 (보내기 문자열 STR)를 { webSocket.Send (STR); } 공공 무효 닫기 () { webSocket.Close (); } # 지역 웹 소켓 이벤트 처리기 /// <요약> /// 웹 소켓이 열려, 우리는 데이터를주고받을 준비가되면 호출 /// </ 요약> 무효 의 OnOpen (웹 소켓 WS) { debug.log를 ( " 연결 " ); setConsoleMsg는 ( " 연결 " ); } /// <요약> /// 우리는 서버에서 문자 메시지를받을 때 호출 /// </ 요약> 무효 OnMessageReceived (웹 소켓 WS, 문자열 메시지) { debug.log를 (메시지); setConsoleMsg (메시지); } /// <요약> /// 웹 소켓 폐쇄 때 호출 /// </ 요약> 공극 OnClosed (웹 소켓 WS, UINT16 코드 스트링 메시지) { debug.log를 (메시지 + " 닫기 " ); // setConsoleMsg (메시지); // antiInit (); // 초기화 (); } //OnApplicationQuit 무효 무효 OnApplicationQuit을 () { // 인쇄 (webSocket.IsOpen); // (! 웹 소켓 = 널 (null) && webSocket.IsOpen)의 경우 // { 인쇄 ( " 종료 " ); // webSocket.Close (); // // antiInit (); // } } 개인 무효 들의 OnDestroy () { 인쇄 ( " 32 파괴 " ); // (웹 소켓! = NULL && webSocket.IsOpen)의 경우 // { // 인쇄 ( "32 파괴"); // webSocket.Close (); // // antiInit (); // } } /// <요약> /// 오류가 클라이언트 측에서 발생한 때 호출 /// </ 요약> 공극 의 OnError (WS 웹 소켓 예외 예) { 문자열 에서 errormsg = 문자열 .Empty; # 만약 ! UNITY_WEBGL을 || UNITY_EDITOR 경우 (ws.InternalRequest.Response! = null이 ) 에서 errormsg = 문자열 .Format ( " 서버에서 상태 코드 : {0} 및 메시지 : {1}" , ws.InternalRequest.Response.StatusCode, ws.InternalRequest.Response.Message) #endif 다음 ; debug.log를 (에서 errormsg) setConsoleMsg (에서 errormsg) // antiInit (); // 초기화 (); } #endregion }
스크립트 방법 대응하는 것은, WebGL을 직접 테스트에 사용할 수있는 PC 측에 전환 할 필요가 없습니다 않는, 해당 버튼을 채우기 위해
HTTP : //ruyice.com/test을 나는이 웹 소켓의 URL에 있던 서버 테스트 주소 테스트, 자신의 서버를 구축 할 귀찮게하지 않습니다
WS : URL WS 테스트 스크립트 URL에 위의 이미지를 입력 //demos.kaazing.com/echo을
테스트 결과 :
제거 직접적인 방법에 가까운, OnDestory ()과의 OnApplicationQuit () ()에서 websocket.close는, 다음 오류 않을 경우 아무 영향을주지 않으면 서 문제, 시험 중에 발생, 실행하지만, 항상 불편 보았다 동시에 프로그램을 끄 또한 웹 소켓을 해제하고, 그렇게하다