동일 port 사용하는 서버를 여러 개 실행시킬 수 없다.
서버는 클라이언트에서 데이터를 받아 모든 클라이언트에게 넘기기 때문에 어떤 클라이언트가 데이터를 주었는가를 알아야한다.
-> Broadcasting 구현을 통해 해결 => TcpClient 객체 사용
Thread 함수의 파라미터 전달을 위해 ParameterizedThreadStart객체 사용
C# generic collection
- List 객체는 array와 다리 동적으로 data를 추가, 삭제, 검색할 수 있다.
- Object 기반 collection은 요소에 접근할 때마다 형 변환 필요
-> 어떠한 type의 변수도 Add(기타연산)할 수 있다.
- Generic 기반 collection은 요소에 접근할 때마다 형 변환 필요 없다.
-> 선언시 정의한 type의 변수에 대해서만 Add(기타연산)할 수 있다.
connection 관리의 어려움
- 연결 open, close, error에 대한 관리 대책이 필요
- 주기적으로 socket이 연결 상태인지 체크 필요
- 비정상 종료에 대한 처리 필요
-> 다수 클라이언트가 동시 접속하는 경우 안정적으로 여러 클라이언트 소켓을 관리하는 것이 어렵다.
WebSocket
- Web기반 Socket 프로그래밍 프레임워크
- TCP socket과 비슷하게 데이터를 주고 받으며 Polling 보다 자유롭게 데이터 전송 가능
- Websocket을 지원하는 브라우저가 적다.
- 브라우저 상관없이 웹에서 실시간 데이터 처리를 위해 socket.io 제공
- 데이터 주고 받기위한 메세지 규약 제공
- 연결 유지를 위한 핑퐁 등과 같은 socket 연결 기본 기능 구현
- 서비스 개발자는 실시간 데이터 처리만 집중할 수 있다.
-> 서버 구현이 단순, 클라이언트 전용 유니티와 Web으로 구현 가능
socket.io 주요 함수
1. listening
-> io.attach(4567);
2. 클라이언트 접속 이벤트
-> io.on('connection', function(socket){...});
3. Socket 이벤트
-> socket.on('chat message', function(msg){...});
4. 데이터 전송
-> io.emit('chat message', msg); // 접속한 모든 클라이언트에 전송
-> 데이터 전송시 JSON(JavaScript Object Notation) 포맷 사용
Socket.IO는 데이터 전송을 위해 JSON포맷 사용
-> 속성-값 쌍을 사용해 데이터 오브젝트를 전달하기 위한 개방형 표준
-> 단순 변수와 복합 변수를 표현할 수 있음.
'학교수업' 카테고리의 다른 글
정보보호개론 13주차 (0) | 2021.12.04 |
---|---|
가상현실 프로그래밍 13주차 (0) | 2021.12.03 |
임베디드 기초 12주차 (0) | 2021.11.30 |
정보보호개론 12주차 (0) | 2021.11.27 |
임베디드 기초 11주차 (0) | 2021.11.27 |