WebSocket을 Flatter와 결합하는 방법

WebSockets가 분명히 업계 전체를 휩쓸고 있다.구글의 Flitter 프레임워크도 부상함에 따라 이 두 가지 기술을 어떻게 통합하는지 이해하는 데 큰 도움이 될 것이다.

WebSocket이란?



WebSocket은 클라이언트/서버 웹 기술이 기대했던 발전을 대표한다.그것은 클라이언트와 서버 사이의 쌍방향 통신 채널을 정의했다.

Related:
What do you mean by client and a server?


간단하게 말하면 서버와 클라이언트가 웹소켓으로 업그레이드하는 초기 악수에 동의한 후에 (HTTP에서) 클라이언트와 서버는 실시간으로 대화를 할 수 있고 끊임없이 요청을 할 필요가 없다(예를 들어 페이지를 반복해서 불러오는 것).
본고는 실시간 떨림 응용 프로그램을 위해 신뢰할 수 있는 웹소켓 기반 해결 방안을 개발하는 클라이언트 문제만 논의한다.서버에서 어떤 해결 방안을 사용하고 싶은지 확인해야 합니다.만약 아직 없다면 Socket.IO와 같은 개원고를 사용할 수 있다.

Flatter를 사용하여 WebSocket 서버에 연결하는 방법


웹 socket channel 패키지


이 패키지를 사용하면 WebSocket 서버에 연결하는 데 필요한 도구를 얻을 수 있습니다.
  • web_socket_channel는 기본적으로 StreamChannel 클래스와 함께 작업하고 StreamChannel 클래스는 추상적인 클래스로 양방향 통신 채널(WebSocket과 같은 상황)을 나타낸다
  • StreamChannel데이터 수신용Stream을 공개한다.AStream는 파이프와 같아서 한쪽 끝에 값을 놓으면 다른 한쪽 끝에 감청기가 있으면 감청기가 이 값을 받는다.
  • 메시지를 서버로 전송하는 데 사용되는 StreamSink도 공개했다.
  • 간단히 말해서, 이 패키지는 서버에서 온 메시지를 감청하고, 서버로 메시지를 전송할 수 있도록 합니다. 즉, 듀플렉스 양방향 통신 채널입니다.
    장치
    여기에 설명된 설치 절차를 따르십시오.
    https://pub.dev/packages/web_socket_channel/install

    기본 사상


  • 우리 프로그램에는 사용자가 메시지를 입력할 수 있는 텍스트 필드가 있습니다.우리가 입력한 데이터는 버튼을 누르면 화면에 표시됩니다.
  • 에 표시된 데이터는 서버 응답에서 나온 것이다. 이 예에서 이것은 echo 서버로 수신한 데이터를 되돌려준다는 것을 의미한다.이 서버들은 서버와의 연결이 성공했는지 확인하는 데 사용됩니다.여기서, 우리는 그것들을 사용하여 이 예시의 단순성을 유지할 것이다.
  • 이것은 우리가 사용할 보일러 판이다.

    서버에 연결하는 방법


    WebSocket 서버에 먼저 연결하겠습니다.위에서 설명한 대로 echo webSocket 서버를 사용하겠습니다



    WebSocketChannel channel = IOWebSocketChannel.connect("wss://ws.ifelse.io/");
    

    • WebSocketChannel: 웹소켓을 통해 통신하는 유통도(쌍방향 통신을 대표하는 종류).
    • IOWebSocketChannel: dart:ioWebSocketChannel로 통신한WebSocket.
    • IOWebSocketChannel.connect: 새 웹소켓 연결을 만들고 WebSocket.connecturl에 연결하고 생성된 플러그인을 통해 통신할 수 있는 채널을 되돌려줍니다.
    • 여기wss://ws.ifelse.io/는 echo WebSocket 서버입니다.가장 자주 사용하는 echo 서버 ws://echo.websocket.org 는 더 이상 사용하지 않습니다.




    How to listen to the server



    • 이제 연결이 되었으니 서버에서 온 소식을 들어보겠습니다.
    • 테스트 서버에 메시지를 보내면 같은 메시지를 돌려보냅니다(echo).
    • 우리는 StreamBuilder 소부품을 사용하여 새로운 소식을 감청하고 Text 소부품을 사용하여 그것들을 표시할 것이다.
    • StreamBuilder:
      1. 노출된 흐름을 감청할 수 있다.
      2. 소부품 반환
      3. 얻은 흐름 정보의 스냅샷을 포착한다.



    StreamBuilder(  
      stream: widget.channel.stream,  
      builder: (context, snapshot) {  
        return Padding(  
          padding: const EdgeInsets.all(20.0),  
      child: Text(snapshot.hasData ? '${snapshot.data}' : ''),  
      );  
      },  
    )
    

    Watch this video to get a better idea about StreamBuilder:


    How to Send data to the server



    부동 단추를 눌렀을 때 흐름에 데이터를 보내는 함수sendData()를 추가합니다



    void sendData() {  
      if (_controller.text.isNotEmpty) {  
        widget.channel.sink.add(_controller.text);  
      }  
    }
    

    • channel.sink.add():WebSocketChannel의sink 속성을 사용하여 값을 흐름의 다른 단점(즉 서버)으로 전송합니다.
    • 빈 데이터가 아닌 것을 확인하기 위해

    How to close the connection?


    close 방법을 사용하면 서버와의 연결을 끊을 수 있습니다



    void dispose() {  
      widget.channel.sink.close();  
     super.dispose();  
    }
    

    Final Code





    서버에 성공적으로 연결하면 아날로그에서 이 점을 볼 수 있습니다


    이것이 바로 응용 프로그램이 끝을 어떻게 보아야 하는지입니다:


    Where can you use it?


    WebSockets가 등장하기 전부터 실시간 웹은 존재했지만 실현하기 어려웠고 속도가 느리며 비실시간 응용 프로그램에 기반한 해커 네트워크 기술이었다.WebSocket 프로토콜은 진정한 실시간 네트워크를 위해 길을 닦았고 인터넷 통신의 가능성을 확장하였습니다


    용례:


    • 온라인 기반 게임
    • 채팅 애플리케이션

    좋은 웹페이지 즐겨찾기