Node.js 서버 만들기
준비사항
- IOSignal은 Node.js 기반 클라이언트와 서버를 제공하며, 이를 사용하려면 Node.js 가 우선 설치되어야합니다.
- vscode 같은 문서편집기도 준비해주시기 바랍니다.
- 간단한 npm 사용법, vscode 같은 편집기 사용법은 미리 학습하셔야합니다.
간단한 서버 만들기
프로젝트 폴더를 만듭니다.
$ mkdir ioserver
$ cd ioserver
아래의 초기화 명령을 입력하면, 프로젝트에 필요한 정보를 설정하는 package.json 파 일이 자동 생성됩니다.
$ npm init -y
그리고 package.json 이 있는 폴더에서 iosignal 페키지를 설치합니다.
$ npm i iosignal
ES Module 방식을 사용하기위해 package.json 파일을 편집기로 열어서 "type":"module",
설정을 추가합니다.
이 과정을 생략할 경우, 소스코드의 확장자를 js 대신 mjs로 바꿔줘야합니다.
// package.json
{
"name": "ioserver",
"version": "1.0.0",
"main": "index.js",
"type": "module", // ESModule 을 기본으로 사용시 추가
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"keywords": [],
"author": "",
"license": "ISC",
"description": "",
"dependencies": {
"iosignal": "^2.1.0"
}
}
ioserver 폴더 안에 간단한 메시지브로커 서버를 만들어봅니다. 아래와 같이 2줄만으로 실제 작동되는 메시지 서버가 만들어집니다.
// simple-server.js
import { Server } from 'iosignal'
const server = new Server( { port: 7777 })
위 서버는 아래와 같이 작동됩니다.
- port 7777 으로 웹소켓 기반 IOSignal Client 접속을 받습니다.
- 접속된 클라이언트들간의 시그널(메시지)를 전달해줍니다.
IOSIgnal은 메시지 프로토콜을 기본 내장하여 제공하므로, 위와 같이 간단히 port 번호만 지정하여 서버를 구동하면 별도의 코딩없이 메시지 전달 기능을 수행할 수 있습니다.
하지만, 클라이언트 접속 상태를 모니터링하거나 제대로 메시지가 수신되고있는지 확인이 필요할 경우가 있습니다. 몇가지 옵션을 추가 지정해봅니다.
// server.js
import { Server, version } from 'iosignal'
const options = {
port: 7777,
congPort: 8888,
showMetric: 2,
showMessage: 'message'
}
const server = new Server(options)
console.log( 'iosignal version: ', version )
위 서버는 아래와 같이 작동됩니다.
- port 7777 으로 웹소켓 기반 IOSignal Client 접속을 받습니다.
- congPort 8888 으로 아두이노 클라이언트 접속을 받습니다.
- 접속된 클라이언트들간의 시그널(메시지)를 중계해줍니다.
- 현재 접속된 클라이언트 목록을 주기적으로 보여줍니다.
- 클라이언트에게 수신된 메시지를 바이트정보로 출력합니다. (디버그용)
직접 실행해 봅니다.
% node server.js
opening WebSocket Server port: 7777
opening CongSocket Server: 8888
iosignal version: 2.1.0
...
┌─────────┐
│ (index) │
├─────────┤
└─────────┘
서버 주소 (클라이언트 접속용)
서버가 구동된 후 iosignal-cli 프로그램이나 Node.js client 또는 browser 예제 소스를 사용하여 접속해봅니다.
localhost 에서 실행된 서버에 접속할 경우엔 클라이언트 측에서 접속될 서버 url 을 아래와 같이 설정합니다.
- 일반 비암호 접속이므로 ws:// 로 시작합니다.
- localhost 는 동일한 컴퓨터를 의미합니다.
- port 는 서버에서 지정된 값을 사용합니다.
// client 소스코드 중 IO 서버 주소 설정 부분
let io = new IO( 'ws://localhost:7777')
동일한 공유기에 접속된 데스크탑이나 노트북이 여러대인경우, 다른 컴퓨터에서 접속할수도 있습니다. 이경우 서버가 구동된 컴퓨터의 사설망 IP 주소를 사용하여 접속 가능합니다. (단, 방화벽 차단 하지 않은경우)
// client 소스코드 중 IO 서버 주소 설정 부분
let io = new IO( 'ws://192.168.0.33:7777')