웹 소켓 에 서버 를 배치 하지만 외부 네트워크 에 연결 할 수 없 는 해결 방법

머리말
본 고 는 주로 웹 소켓 배치 서버 의 외부 네트워크 가 연결 되 지 않 는 다 는 내용 을 소개 하고 참고 학습 을 제공 합 니 다.다음은 더 이상 할 말 이 없 으 니 상세 한 소 개 를 해 보 겠 습 니 다.
먼저 말 해 야 할 것 은 내 가 만난 문제 이다.
WebSocket connection to 'ws://www.xxxx.com/xxx/xx' failed: Error during WebSocket handshake: Unexpected response code: 200
사이트 가 서버 에 연결 되 어 있 습 니 다.서버 에서 웹 Socket 서 비 스 를 직접 방문 하 는 것 은 가능 합 니 다.그러나 제 가 외부 네트워크 로 방 문 했 을 때 이 오 류 는 제 가장 큰 적 입 니 다.그 전에 몇 명의 좀도둑 을 만 났 습 니 다.쉽게 해결 할 수 있 습 니 다.더 이상 언급 하지 않 고 boss 에 직면 하 세 요.
두 오후 동안 해결 방안 을 찾 았 지만 각종 해결 방안 을 찾 지 못 했다.그러나.NET 에서 이 문 제 를 직접 묘사 하 는 것 은 많 지 않 았 다.그러나 이 문제 에 직면 한 친 구 는 많 지 않다.
이것 은 브 라 우 저 문제 와 상 관 없 이 나 는 화 호,구 글,IE 테스트 를 한 적 이 있 는데 문제 가 생 길 수 있다.
개발 플랫폼:.NET,ASP.NET MVC 를 이용 하여 사 이 트 를 구축 하고 그 중에서 WebSocket 서 비 스 를 이용 하여 사이트 내 에서 토론 플랫폼 을 설계 하 는 것 이 목적 입 니 다.
구체 적 으로 말 하면
우선,제 홈 페이지 코드 를 보 세 요.

<script type="text/javascript">
  $(function () {
   var url = "ws://xxxx:xx"+"@Url.Action("RequestProcessCenter")";
   var ws;
   function connect() {
    ws = new WebSocket(url);
    $("#TopicContent").append("    
"); ws.onopen = function () { $("#TopicContent").append("
"); }; ws.onmessage = function (evt) { console.log(evt.data); $("#TopicContent").append(evt.data); }; ws.onclose = function () { $("#TopicContent").append("
"); }; ws.onerror = function (evt) { console.log(evt.data); $("#TopicContent").append(evt.data); }; }; $("#send").click(function () { console.log(1); console.log(ws.readyState); console.log(WebSocket.OPEN); if (ws.readyState == WebSocket.OPEN) { ws.send($("#content").val()); $(this).val(""); } else { $("#TextMessge").append(" "); } }); $("#open").click(function () { connect(); }); $("#close").click(function () { ws.close(); }); }); </script>
배경 코드:

public void RequestProcessCenter()
  {
   if (HttpContext.IsWebSocketRequest)
   {
    var currUser = GetCurrUser();
    this._UserName = currUser.LoginName;
    HttpContext.AcceptWebSocketRequest(ProcessTopic);
   }
   else
   {
    HttpContext.Response.Write("     ");
   }
  }
웹 소켓 이 요구 하 는 url 형식 은 잘못 되 지 않 을 것 같 습 니 다.
그림%1 개의 캡 션 을 편 집 했 습 니 다.

200 으로 돌아 가자.비록 요청 이 성 공 했 지만 결 과 는 우리 가 원 하 는 것 이 아니다.


요청 방식 도 확실히 웹 소켓 인 데 오류 가 있 습 니 다.왜 일 까요?많은 자 료 를 조 회 했 지만 이 문 제 를 진정 으로 해결 하 는 것 을 발견 하지 못 했다.아마도 내 가 찾 는 방식 에 문제 가 있 을 것 이다.그러나 바 이 두 앞의 세 페이지 를 나 는 보 았 지만 원 하 는 해결 방안 이 없 었 다.스스로 손 을 써 서 테스트 를 해 보 니 오히려 효과 가 있 었 다.
내 가 서버 에 배치 한 사 이 트 는 기본 80 포트 를 사용 합 니 다.방문 은 실 효 됩 니 다.만약 웹 소켓 이 사이트 와 연 결 된 같은 포트 를 사용 하지 않 는 다 면?
이 테스트 경과:
      1.로 컬 80 포트 바 인 딩 도 메 인 이름 webSocket 은 도 메 인 이름 을 사용 합 니 다.포트 80 이 잘못 되 었 습 니 다.
      2.로 컬 80 포트 바 인 딩 도 메 인 이름 webSocket 2017 포트 호스트 주 소 를 이용 하여 서버 ip 주소 가 유효 합 니 다.
      3.로 컬 2017 포트 에 연결 되 지 않 은 도 메 인 이름 webSocket 은 80 포트 를 사용 하 는 것 이 잘못 되 었 습 니 다.
      4.로 컬 2017 포트 에 연결 되 지 않 은 도 메 인 이름 webSocket 은 2017 포트 를 이용 하여 유효 합 니 다.
총 80 포트 는 시스템 제한 을 받 을 수 있 습 니 다.
다른 한편:도 메 인 이름 바 인 딩 이 테스트 없 이 영향 을 미 칠 지 여부
외부 네트워크 가 200 으로 돌 아 왔 지만 웹 소켓 서 비 스 를 사용 할 수 없 는 문 제 를 성공 적 으로 해결 했다.
이런 상황 에서 주의해 야 할 것 은 IIS 서버 에 두 개의 사 이 트 를 추가 해 야 한 다 는 것 이다.하 나 는 정상 적 인 80 포트 홈 페이지 방문 에 사용 되 고 다른 하 나 는 단독 웹 소켓 기능 을 한다.이 두 사 이 트 는 같은 프로그램 버 전 을 사용 할 수 있다.나 는 이렇게 하 는 것 이다.좋 은 생각 이 없다.초보 급 인물 이다.
https://www.infoq.com/articles/Web-Sockets-Proxy-Servers
이 사 이 트 는 웹 소켓 의 일부 지식 을 소개 하고 웹 소켓 은 기본적으로 80-433 포트 를 사용 합 니 다.혹시 제 사이트 가 연 결 된 포트 와 웹 소켓 이 같은 포트 를 연결 할 때 외부 네트워크 요청 이 바로 이때 발생 한 잘못 이 아 닐 까 생각 합 니 다.이 문제 도 당분간 깊이 연구 하지 못 할 것 입 니 다.일시적인 기능 이 이 루어 졌 지만 이 해결 방안 이 좋 지 않다 고 생각 합 니 다.수 요 를 충족 시 켰 다 고 말 할 수 있 을 뿐 수요 과정 을 간소화 할 수 는 없다.
내 가 서버 에 접근 할 때 가능 하 다 는 추측 을 남 겼 다.모두 80 포트 를 사용 하고 웹 소켓 서 비 스 를 정상적으로 사용 할 수 있다.그것 은 서버 에서 시작 할 때 직접 방문 하 는 것 이 바로 내 로 컬 서비스 이기 때문에 방화벽 은 막 지 않 을 것 이다.그러나 내 가 외부 네트워크 를 사용 할 때 가입 규칙 은 나의 요 구 를 막 고 연결 을 클릭 할 수도 있다.웹 소켓 서 비 스 를 호출 하고 서비스 포트 도 80 포트 를 사용 하여 방화벽 식별 에 문제 가 생 겼 다.
아마 매우 불합리 하 다 고 추측 할 수 있 지만 구체 적 인 문 제 를 찾 지 못 한 상황 에서 나 는 문제 가 발생 하 는 원인 을 분석 하여 나의 문 제 를 해결 할 수 밖 에 없다.
총결산
이상 은 이 글 의 전체 내용 입 니 다.본 논문 의 내용 이 여러분 의 학습 이나 업무 에 어느 정도 참고 학습 가치 가 있 기 를 바 랍 니 다.궁금 한 점 이 있 으 시 면 댓 글 을 남 겨 주 셔 서 저희 에 대한 지지 에 감 사 드 립 니 다.

좋은 웹페이지 즐겨찾기