다섯, 웹 소켓 링크

첫째, 프런트 엔드 코드 :

<! DOCTYPE HTML > 

< HTML LANG = "EN" 의 xmlns = 'http://www.w3.org/1999/xhtml' > 
< 선두 > 
    < 메타 캐릭터 = "UTF-8"  /> 
    < 타이틀 > </ 타이틀 > 
< / 헤드 > 
< 본문 > 
    < 입력 타입 = "버튼" ID = "전송" 의 onclick = "송신 ()" = "发送" > 
    < 입력 유형 = "텍스트"
    스크립트 유형 = "텍스트 / 자바 스크립트" > 
        var에 소켓;
         IF ( 대해서 typeof (A 웹 소켓) ==  " 정의되지 않은 " ) { 
            경고 ( " 귀하의 브라우저가 웹 소켓을 지원하지 않습니다 " ); 
        } 
        / * 
        웹 소켓의 두 가지 방법이 있습니다 : 
    1 , 송신 ()는 원격 서버로 데이터를 전송하는 
    웹 소켓 연결을 닫으 2, () 
        * / 
        / * 웹 소켓은 또한 여러 리스너 함수 정의 
        네트워크 연결이 설정 될 때이 이벤트 트리거의 OnOpen 1, 
        2 네트워크 오류시의 OnError 발생하면 트리거 이벤트 
        (3)는,으로 onClose 이벤트 폐쇄 웹 소켓 때 트리거 
        트리거 서버로부터 송신 된 메시지를 수신하는 이벤트가 통신이 가장 중요한 이벤트 리스너 4, 웹 소켓의 onMessage. msg.data 
        * /
        var에 소켓 =  새로운 웹 소켓 ( ' WS를 : // 로컬 호스트 : 52992 / WS ' );
        // 打开事件
        socket.onopen   =  함수 (E) { 
            경보 ( " 소켓已打开" ); 
            CONSOLE.LOG는 ( " 연결! " ); 
        } 
        socket.onclose =  함수 (E) { 
            경보 ( " 소켓已关闭" ); 
            을 console.log ( " 연결 끊김! " );
        }
        socket.onmessage =  함수 (E) { 
            경보 ( " 소켓 메시지 보내기 " ) 
            CONSOLE.LOG는 ( " : 메시지 수신 "  + ; e.data)를 
        } 
        socket.onerror =  함수 (E) { 
            경보 ( " 소켓 네트워크 오류가 발생 " ) 
            CONSOLE.LOG (e.data) 
        } 
        // 함수 송신 () { 
        //     VAR oText = document.getElementById를 ("메시지 "); 
        //     socket.send (oText.value); 
        // } 
        // 당신은 사용자 정의 할 수 없습니다 
        기능을전송 () {
             var에 otext = document.getElementById를 ( " 메시지 " ); 
            socket.send ( " sendMessage 첨부 " , otext.value); 
        } 
        socket.receivemessage =  함수 (E) { 
            경보 ( " 소켓发送消息" ); 
            을 console.log ( " 接收消息: "  + e.data); 
        } 
    </ 스크립트 > 
</ > 
</ HTML >

시작 구성 :

사용 Microsoft.AspNetCore.Builder 단계;
사용 Microsoft.AspNetCore.Hosting 단계;
사용 Microsoft.AspNetCore.Http 단계;
사용 Microsoft.AspNetCore.Mvc 단계;
사용 Microsoft.Extensions.Configuration 단계;
사용 Microsoft.Extensions.DependencyInjection 단계;
사용하여 시스템;
사용 System.Net.WebSockets 단계;
사용 하여 System.Threading 단계;
사용 System.Threading.Tasks 단계;
사용 test.Hubs 단계; // 3,引用处理客户端-服务器通信的高级管道
네임 스페이스 테스트 
{ 
    공공  클래스 시작 
    { 
        공개시작 (IConfiguration 구성) 
        { 
            구성 = 구성; 
        } 
        공공 IConfiguration 구성 { GET ; }
         // 이 메소드는 런타임에 의해 호출됩니다. 컨테이너에 서비스를 추가하려면이 방법을 사용합니다. 
        공공  무효 ConfigureServices (IServiceCollection 서비스) 
        { 
            services.Configure <CookiePolicyOptions> (옵션 => 
            { 
                // 이 람다가 중요하지 않은 쿠키를 사용자의 동의가 주어진 요청에 대한 필요 여부를 결정합니다. 
                options.CheckConsentNeeded = 환경 => 사실; 
                options.MinimumSameSitePolicy = SameSiteMode.None; 
            }); 
            . services.AddMvc () SetCompatibilityVersion (CompatibilityVersion.Version_2_1); 
            services.AddSignalR (); // 1,添加服务은 
        }
         // 이 메소드는 런타임에 의해 호출됩니다. HTTP 요청 파이프 라인을 구성하려면이 방법을 사용합니다. 
        공공  무효 구성 (IApplicationBuilder 응용 프로그램, IHostingEnvironment의 ENV) 
        { 

            경우 (env.IsDevelopment ()) 
            { 
                app.UseDeveloperExceptionPage (); 
            } 
            다른 
            {
                app.UseExceptionHandler ( " / 홈 / 오류 " ); 
            } 
            // 跨域 
            app.UseCors (빌더 => 
            { 
                builder.SetIsOriginAllowed (출처 => 사실 ) 
                    .AllowAnyHeader () 
                    .WithMethods ( " GET " , " POST " ) 
                    .AllowCredentials (); 
            }); 
            // 静态资源
            app.UseStaticFiles ();
            // 쿠키 
            app.UseCookiePolicy ();
             // 1의 구성 미들웨어 웹 소켓
            app.UseWebSockets ();
            // 2检查它是否是웹 소켓请求并接受웹 소켓请求. 
            app.Use ( 비동기 다음 (컨텍스트) => 
            { 
                경우 (context.Request.Path == " / WS " ) 
                { 
                    경우 (context.WebSockets.IsWebSocketRequest ) 
                    { 
                        웹 소켓 웹 소켓 = AWAIT context.WebSockets.AcceptWebSocketAsync ();
                         AWAIT 에코 (문맥, 웹 소켓) 
                    } 
                    다른  
                    {
                        context.Response.StatusCode = 400 ; 
                    } 
                } 
                다른 
                { 
                    AWAIT 다음 (); 
                } 

            }); 

            // 구성 signalr 경로
             // app.UseSignalR (= 노선> // 2 참조
             // {
             //     routes.MapHub <ChatHub > ( "/ chatHub");
             // })
             // MVC 패턴 
            app.UseMvc (노선 => 
            { 
                routes.MapRoute ( 
                    이름 : "기본 " , 
                    템플릿 : " {컨트롤러 = 홈} / {행동 = 인덱스} / {ID?} " ); 
            }); 
        } 


        # 지역 에코
         개인  비동기 작업 에코 (HttpContext를 문맥, 웹 소켓 웹 소켓) 
        { 
            var에 버퍼 = 새로운  바이트 [ 1024 * 4 ] 
            결과 WebSocketReceiveResult = AWAIT webSocket.ReceiveAsync를 ( 새로운 ArraySegment < 바이트 > (버퍼) CancellationToken.None)
             동안 (!result.CloseStatus.HasValue) 
            {
                 AWAITwebSocket.SendAsync ( 새로운 ArraySegment < 바이트 > (버퍼 0 ) result.Count을 result.MessageType, result.EndOfMessage, CancellationToken.None); 

                결과 = AWAIT webSocket.ReceiveAsync ( 새로운 ArraySegment < 바이트 > (버퍼)를 CancellationToken.None); 
            } 
            AWAIT webSocket.CloseAsync (result.CloseStatus.Value, result.CloseStatusDescription, CancellationToken.None); 
        } 
        #endregion 

    } 
}

주 : 메소드를 정의 할 수있는 방법

 

추천

출처www.cnblogs.com/fger/p/11819838.html