기본 콘텐츠로 건너뛰기

socketcluster tutorial - 2. 시작하기 (Getting Started)

시작하기


SocketCluster를 시작하려면 Node.js가 설치되어 있어야 합니다. 이 지침에 따라 NodeJS를 설치할 수 있습니다. 또는 Baasil.io로 Docker 컨테이너에서 SocketCluster를 실행할 수 있습니다. - Kubernetes 환경에 앱을 배포하려는 경우 이상적입니다 - 여기를 참조하십시오.

Node가 설치되면 SocketCluster를 설치할 수 있습니다. SocketCluster를 설치하는 두 가지 방법이 있습니다. 가장 간단한 방법 프레임워크로 설치할 수 있고 보다 구체적인 요구 사항이있는 경우 클라이언트와 서버를 따로 설치할 수도 있습니다. 두 설정은 거의 동일한 API를 공유하므로 일반적으로 전환할 때 코드를 변경할 필요가 없습니다. 사실, socketcluster-server는 socketcluster (프레임 워크)의 직접적으로 종속됩니다.

SocketCluster를 독립 실행형 서버 및 클라이언트로 설치하려면 다음을 수행하십시오. 여기(서버)여기(클라이언트)의 지침을 따르십시오.

프레임워크로 설치하려면 (권장) :
npm install -g socketcluster
일단 설치되면, socketcluster create 명령은 새로운 SocketCluster 를 설치합니다. 예를 들어, socketcluster create myApp는 현재 작업 디렉토리에 myApp라는 디렉토리를 작성합니다.
socketcluster create myApp
번들된 패키지(webpack같은)에서 사용하려면
npm install --save socketcluster
npm install --save socketcluster-client
하고 서버에서
var SocketCluster = require('socketcluster').SocketCluster
그리고 클라이언트에서
var SocketCluster = require('socketcluster-client')
를 추가합니다.

SocketCluster 서버 프로그래밍


이 작업을 마치면 myApp으로 이동하여 node server.js를 사용하여 즉시 서버를 실행할 수 있습니다
node server.js
브라우저에서 http://localhost:8000/ 으로 이동하여 서버에 연결할 수 있습니다.

SocketCluster의 실시간 기능을 테스트하려면 브라우저의 개발자 콘솔을 열고 다음과 같이 입력하십시오:
// Client side
var socket = socketCluster.connect();
socket.emit('sampleClientEvent', {message: 'This is an object with a message property'});
'Sample channel message: 1' 메시지가 다시 나타납니다. - 서버는 sampleClientEvent 이벤트를 수신 한 다음 샘플 이벤트를 청취중인 모든 클라이언트에 게시합니다.

emit 및 publish 명령의 두 번째 인수로 JSON과 호환되는 거의 모든 것을 전달할 수 있습니다.

클라이언트 측의 socketCluster.connect () 메소드에 object형인 옵션을 사용할 수 있습니다. 자세한 내용은 socketCluster를 참조하십시오. 주요 SocketCluster JavaScript 클라이언트에 대한 자세한 내용을 보려면 여기를 클릭하십시오.

서버 측에서는 server.js 내의 코드를 편집하여 SocketCluster를 구성 할 수 있습니다. SocketCluster는 30가지 이상의 옵션을 제공하며 사용자의 특정 요구에 맞게 변경할 수 있습니다 (대부분 옵션은 선택 사항 입니다).

다음은 server.js 파일의 예제입니다 (주석 포함):
var SocketCluster = require('socketcluster').SocketCluster;
var socketCluster = new SocketCluster({
  workers: 1, // worker processes의 갯수
  brokers: 1, // broker processes의 갯수
  port: 8000, // 서버가 여는 포트 번호
  appName: 'myapp', // 고유한 앱 이름
  // 주요 성능 향상을 위해 wsEngine을 'ws'를 'uws'로 전환하세요
  wsEngine: 'ws',
  /* 워커/서버를 구성하는 JS 파일
   * 여기서 대부분의 백엔드 코드를 작성합니다.
   */
  workerController: __dirname + '/worker.js',
  /* 각각의 브로커들을 구성하는 JS 파일
   * 여러 시스템에서 수평으로 확장하는 데 유용합니다 (선택 사항).
   */
  brokerController: __dirname + '/broker.js',
  // 워커가 죽을 경우 재시작할지 여부 (기본값은 true)
  rebootWorkerOnCrash: true
});
SocketCluster는 여러 개의 프로세스 클러스터를 실행합니다. 각 프로세스에는 각 프로세스의 동작을 구성 할 수있는 자체 '컨트롤러'파일이 있습니다. 로드 밸런서용 컨트롤러, 워커용 컨트롤러 및 브로커 프로세스 용 컨트롤러가 있습니다. 가장 중요한 것은 (대부분의 응용 프로그램을 작성하는) workerController입니다.

그리고 그 다음


workerController (worker.js)에 있는 기존 코드를 살펴보고 만져보세요.

코드를 변경할 때 SocketCluster를 다시 시작하십시오. UNIX와 유사한 환경에서 실행중이라면 SIGUSR2 신호를 마스터 PID 순서로 보내어 새로운 소스 코드로 오직 워커들만 재시작할 수도 있습니다.

Nick Kotenberg의 비디오

이 블로그의 인기 게시물

ESP32 DevBoard 개봉기

오늘 드디어 손에 넣었다. ESP32 DevBoard!
Adafruit 에서 15개 한정 재입고 트윗을 보고 광속 결제.
그리고 1주일의 기다림. 사랑해요 USPS <3
알리를 이용하다보니 1주일 정도는 광속 배송임.
물론 배송비도 무자비함 -_ㅜ
15개 한정판 adafruit 발 dev board
그놈이 틀림없으렸다.
오오 강려크한 포스
ESP32_Core_board_V2라고 적혀있군요.
ESP32 맞구요. 네네. ESP32-D0WDQ6 라고 써있는데 D → Dual-core 0 → No internal flash W → Wi-Fi D → Dual-mode Bluetooth Q → Quad Flat No-leads (QFN) package 6 → 6 mm × 6 mm package body size 라고 함.
길이는 이정도
모듈크기는 이정도
코어는 6mm밖에 안해! 여기에 전기만 넣으면 BLE+WIFI!
밑에 크고 발 8개 달린 놈은 FM25Q32라고 32Mbit 플래시메모리
ESP8266 DevBoard 동생이랑 비교 크고 아름다운 레귤레이터랑 CP2102 USB Driver가 붙어있음.
ESP8266 DevBoard엔 CH340G 인데 확 작아졌네.
머리를 맞대어 보았음.
모듈크기는 아주 약간 ESP32가 더 큰데 워낙에 핀이 많고 촘촘함. ESP8266인 ESP12는 핀 간격이 2.00mm인데 비해
ESP32는 1.27mm 밖에 안함.
딱봐도 비교가 될 정도.
https://www.sparkfun.com/news/2017 크고 아름다운 Pinouts

ESP8266 보드랑 별로 안달라보인다.
http://www.silabs.com/products/mcu/pages/usbtouartbridgevcpdrivers.aspx#mac
에서 CP2102 드라이버를 설치하고
screen 으로 연결해보자.
내 경우엔 tty.SLAB_USBtoUART 로 잡혔다.
어디서 기본 속도가 115200bps 라고 들은 적이 있어서
screen /dev/tty.SLAB_USBtoUART …

Rinkeby Test Network에 접근하는 간단한 방법.

dApp 개발 시 실제 계정으로 트랜젝션을 보내면 너무나 비싸므로
Rinkeby나 Ropsten 같은 테스트 네트워크에 연결하여 마이닝 없이 faucet을 통해 ether를 받고
그걸로 트랜젝션 테스트를 하면 편리하다.

보통 https://github.com/ethereum/wiki/wiki/Dapp-using-Meteor#create-your-%C3%90app 문서를 보고 시작하는데
geth --rpc --rpccorsdomain "http://localhost:3000" 이렇게 하면 마이닝부터 해야하니 귀찮다.
https://infura.io/#how-to 를 보고 계정을 신청하자. 이런 것도 호스팅이 되다니 좋은 세상이네.
간단한 개인 정보 몇가지를 입력하고 나면 Access Token이 나온다.

가입 후  https://infura.io/register.html 화면

Access Token이 있는 네트워크 주소로 geth를 연결한다.
geth --rpc --rpccorsdomain "https://rinkeby.infura.io/<YOUR_ACCESS_TOKEN>" 이러면 오케이.

meteor project를 만들고
meteor add ethereum:web3 추가한 다음 console에서
web3.eth.getBalance(web3.eth.coinbase, (error,result)=>console.log(
  error, result.toFormat()
)); 자신의 coinbase의 잔액을 구해보자.
6eth가 최소단위인 wei로 보면 6,000,000,000,000,000,000 정도.
https://faucet.rinkeby.io/ 여기에서 받아온 (무료로/마이닝없이) ether가 잘 나온다.
여기서부터 시작하는게 좋아보인다.

meteor로 nw.js 개발하기.

실제로 nw.js 어플리케이션을 개발하다보면 UI구현하기 막막하고 수동으로 리프레쉬 하는 것도 귀찮아서 Meteor 연동을 하려고 했더니 생각보다 간단했다.

디렉토리 구조는 먼저 이렇게 잡았다.
`- app
  `-client
  `-public
`- dist
  `- 배포용 html,css,js
  `- package.json
`- package.json 아이디어는 이렇다. nw.js의 시작페이지를 http://localhost:3000으로 두고 배포시엔 meteor client 배포툴인 meteor-build-client를 사용하여 html,css,js 로 분리하는 계획이다.

가장 중요한 nw.js 용 package.json 파일은 아래와 같이 구성한다.
{
  "main": "http://localhost:3000",
  "node-remote": "http://localhost:3000",
  "name": "<앱이름>"
} 이게 전부. 어떻게 보면 Web과 nw.js를 동시에 개발할 수도 있는 환경이기도 한 것이다.
meteor create app 을 해서 meteor용 앱을 만들고 meteor 를 시작한다.
그리고, 위의 package.json이 있는 경로로 돌아가서 nw . 으로 nwjs를 실행한다.

한번 번쩍하더니 잘 된다.
cordova 등에서 index.html 대신 http://localhost:3000을 하는 것도 비슷한 느낌이다.

즐겁게 개발을 일단 마구 하고 실제로 배포하기 위해서는 개발환경이 아니라 html,css,js로 구성된 배포본을 만들어야한다.
npm install -g 해도 되지만 어짜피 Meteor에서만 쓸거
meteor npm install -g meteor-build-client 해버릴거다.

개발은 문제 없어 보이고 배포판을 한번 만들어보자. meteor app 이 있는 경로(meteor run으로 …