문제

나타났는 문제.완료된 이벤트의 SocketAsyncEventArgs 을 중지한 것처럼 보이지만 사격.동 SAEA 할 수 있는 화재로 대체될 수영장에서 여러 번,그러나 결국은 모든 인스턴스가 정지를 발사하고 있기 때문에 코드 교체하는 수영장에서는 이벤트에서 핸들러 풀을 비웁니다.

다음과 같은 상황 또한 분명히 사실이다:

1)그것만이 발생할 경우 서버 사이드 소켓 데이터를 전송을 하나의 연결되어 있는 클라이언트.을 때 같은 클래스를 연결하는 클라이언트로서,그것은 나타나지 않을 수 있습니다.

2)발생할 것으로 보입니다 아래에서 높은 하중이 작용합니다.실수 크리프 것까지 결국 오류가 발생합니다.

3)테스트 장비 유사한 스트레스를 나타나지 않을 수 있습니다.(It's only20 초당 메시지,그리고 테스트 장비 입증되었습니다 20K)

나지 않을 붙여넣을 수 있도록 오히려 복잡한 코드,하지만 여기 의 설명 내 코드:

1)주요 영은 이것입니다: http://vadmyst.blogspot.ch/2008/05/sample-code-for-tcp-server-using.html.는 방법을 보여줍니다면 연결이 완료 포트를 사용하여 이벤트가 어떻게 서로 다른 크기의 메시지를 통해 TCP 연결니다.

2)나는 바이트 버퍼에서는 모든 SAEAs 조각,지 않는 겹칠 수 있습니다.

3)나는 객체의 수영장 SAEAs 을 기반으로,blockingcollection.이 발생하는 경우 수영장은 비어 있습니다.

4)서버처럼,나는 유지의 컬렉션을 소켓에서 반환된 AcceptAsync 기능,인덱스의 끝점에 클라이언트입니다.단일 프로세스 중 하나를 사용할 수 있습니다 인스턴스 서버로서 뿐만 아니라 여러 인스턴스로 클라이언트(을 형성하고).그들이 공유하는 데이터 버퍼의 수영장 SAEAs.

나는 그것을 실현의 설명하기 어려운 이;나는 디버깅을 위해 그것은 전체이다.다만 바라고 누군가는 이 소식을 듣고하거나 유용한 질문이나 제안 사항입니다.

는 순간에,내가 심는 일종의 스레드에 고갈어 SAEAs 할 수 없다는 전화를 완료합니다.또,어떤 종류의 버퍼 문제가에서 송신 버퍼입니다.

도움이 되었습니까?

해결책

그래서 다른 날의 디버깅하고 마지막으로 나비가되어 있는지 알아보십시오.

1)SAEAs 지 않은 발사에 완료된 이벤트이었기 때문에 보낼 수 없 더 있습니다.이에 의해 밝혀 Wireshark 때문에 TCP 창을 비우.(TCP ZeroWindow)

2)TCP 창 비우기 때문에 네트워킹층을 통과하는 이벤트까지 스택하는 데 시간이 너무 오래 걸을 완료하는,즉 없는 생산자/소비자 간의 네트워크 계층 프로그램입니다.따라서 네트워크 op 것을 기다려야에 대해 스크린 그리기를 보내기 전에 ACK.

3)이는 너무 오래 걸렸었다면에 그릴 이벤트 처리기에 있습니다.테스트 장비 콘솔 창(는 하나 요약에 들어오는 메시지),그래서 그 이유는지 원인에서 문제가 훨씬 더 높은 하중.그것은 정상적인지를 다시 그리기 화면에 각각의 메시지,하지만이 일어나고 있었기 때문에 프로젝트지는 않습니다.다시 그리기율은 수정되었습니다.

4)단기적으로 솔루션은 단순히 가 없는지 확인 Gui 를 들고합니다.더 강력한 솔루션이 될 수 있을 만드는 생산자/소비자 네트워크 계층입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top