웹 소켓 에 서버 를 배치 하지만 외부 네트워크 에 연결 할 수 없 는 해결 방법
본 고 는 주로 웹 소켓 배치 서버 의 외부 네트워크 가 연결 되 지 않 는 다 는 내용 을 소개 하고 참고 학습 을 제공 합 니 다.다음은 더 이상 할 말 이 없 으 니 상세 한 소 개 를 해 보 겠 습 니 다.
먼저 말 해 야 할 것 은 내 가 만난 문제 이다.
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 포트 를 사용 하여 방화벽 식별 에 문제 가 생 겼 다.
아마 매우 불합리 하 다 고 추측 할 수 있 지만 구체 적 인 문 제 를 찾 지 못 한 상황 에서 나 는 문제 가 발생 하 는 원인 을 분석 하여 나의 문 제 를 해결 할 수 밖 에 없다.
총결산
이상 은 이 글 의 전체 내용 입 니 다.본 논문 의 내용 이 여러분 의 학습 이나 업무 에 어느 정도 참고 학습 가치 가 있 기 를 바 랍 니 다.궁금 한 점 이 있 으 시 면 댓 글 을 남 겨 주 셔 서 저희 에 대한 지지 에 감 사 드 립 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
iPad에서 WebSocket + Authorization이 연결되지 않음발단은 iPad에서의 개발 환경을 정비하려고 했기 때문이었습니다. VPS에 개발 환경을 넣을 수 있으면 편리하다고 생각해, 를 인스톨 해, 그대로는 누구라도 사용할 수 버리므로, Apache를 리버스 프록시로 해, ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.