기본 콘텐츠로 건너뛰기

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의 비디오

이 블로그의 인기 게시물

Unicode 2.0 에서 한글의 이해

요즘 SNS이나 SNG등등 기계적으로 문장을 생성하는 프로그램들이 넘쳐나는 시대에 의외로 한글처리를 제대로는 프로그램들이 드물구나 하는 생각에 간단한 한글 자소 분석기를 만들어보았다.
링크는 이쪽(http://jsbin.com/ofoqal/10/edit)

애초에 만든 목적은 다음과 같다.
조사처리(은/는, 이/가, 을/를 등등)를 위해 단어의 마지막 글자의 종성을 조사하기 위함인데 예문을 들어보자면

"준기 강남에서 사진 찍었다."
"예슬 홍대에서 식사 했다."
"슬기 대화방에서 나갔습니다."

"준기님은 강남에서 사진님을 찍으셨습니다 고갱님" 이라고 말하면 할말 없다.

한국식 소프트웨어(꼭 소프트웨어가 아니더라도)의 특징이자 장점이 무엇이냐라고 물으면
귀찮을 정도로 깨알같은 디테일이라고 대답할텐데 한글 기계화 작업에 대한 중요성은 프로그램을 만드는 사람들에게도 별로 중요하게 다가오지 않나보다.

에또 사설이 길었다.
한때 우리는 한글코드체계의 비표준 숲속에서 너무도 괴로운 나날들을 보낸 역사가 있다.
KSC5601부터 시작해서 Microsoft통합형한글을 지나 Unicode 2.0의 시대가 왔다.

개인적으로 UTF-8을 사용하지 않고 EUC-KR이나 CP949를 쓰는 제품이나 서비스의 업체의 대표/관계자에게 1억 미만의 벌금 혹은 3년 이하의 금고형의 실형을 내려줬으면 할 정도로 너무나 많은 사람들을 불행하게 하고 막대한 비용을 지출한 악의 근원이라고 생각한다.

하지만 광명이 왔다.
기계적으로 납득이 가능한 검색 및 정렬이 용이한 Unicode 의 시대가 열렸단 말이다.
지금 당신이 복사해서 붙이고 있는 팁들 보다 훨씬 쉽고 명쾌하니 다음 그림을 한번 보자.
(출처:http://www.w3c.or.kr/i18n/hangul-i18n/ko-code.html) 어떤가?
무쟈게 쉽지 않은가?

현대 한글은 초성 19자, 중성 21자, 종성 27자로. 총 19 x 21 x 28 (종성없음 포함…

즐거운 Online Prototyping Tool 들

jsbin, codepen, jsfiddle 이런 것들은 일단 생략. 너무 유명한 것들이라.

https://launchpad.graphql.com - node.js 기반 graphQL 연습장. 이것만으로도 충분히 훌륭한 백엔드
https://codesandbox.io/ npm 사용이 가능한 클라이언트 사이드 연습장. webpackbin이 너무 문제가 많아서 찾아본 것.

https://scrimba.com 이건 codesandbox+ asciinema(https://asciinema.org/) 같은 느낌인데 키 녹화와 음성 녹화 기능이 추가되었다. 다 좋은데 화살표 키로 빨리감기 뒤로감기 기능이 안되고 익스포트(youtube등)으로 지원이 없는게 아쉽다.

이 둘이 만나면? https://codesandbox.io/s/jvlrl98xw3?from-embed
뭐야 이거 무서워 하지마 ㄷㄷ;  graphql+react-native-web(부왘ㅋㅋ)

https://repl.it/languages 전통을 자랑하는 REPL 도구. 지원 언어 종류가 -_-;;;;;

https://tio.run/# repl.it? 장난함? 얘는 지원 언어가 무려 386종류. J랑 아희도 있다.

https://play.golang.org/ 즐거운 go playground. 소스 포멧팅 넘 좋아.

http://decaffeinate-project.org/repl/ 최고의 coffeescript REPL. 원래 용도는 coffee를 ecma6코드로 바꾸는 것이지만...

https://scaphold.io
https://www.graph.cool/ graphql backend service. scaphold.io는 설치도 필요없는 클라우드. graphcool은 호스팅+클라우드 다있음. 둘 다 막상막하. 푸쉬서버도 되고 뭐 미친득.

https://glitch.com/ gomix에서 결국 glitch로 안착.  node.js

https://www.shadertoy.com 잘하고 싶다! 쉐이다! 오디오도 된다!

http:/…

graphql 연습 /w launchpad

https://launchpad.graphql.com/mw9wkzv99
단순 전체쿼리+조건쿼리+추가

http://graphql.org/graphql-js/passing-arguments/
참고. random ID는 crypto 1.0.1 사용
  type Query {
    Members: [member]
    getMember(id: ID!): member
  }
  type member {
    id: ID!
    text: String
  }
  input memberInput {
    text: String
  }
  type Mutation {
    addMember(member: memberInput): member
  } SQL 정의. facebook 쪽은 스트링에 지지는 거 진짜 좋아하네. *.gql 파일이 있다고 하니 이해해주자.
resolver는 var buffer = [];
const resolvers = {
  Query: {
    Members: (root, args, context) => {
      return buffer;
    },
    getMember: (id)=> {
      return buffer.find(o=>o.id)
    }
  },
  Mutation: {
    addMember(_, {member}) {
      const mm = { ...member, id:randomBytes(10).toString('hex') };
      buffer.push(mm);
      return mm;
    }
  }
}; 평범 평범.
https://dev-blog.apollodata.com/tutorial-graphql-subscriptions-server-side-e51c32dc2951 다음으로 pub/sub 연습.
https://launchpad.graphql.com/xvn94n3ql   type Subscription {
    memberAdded: member
  } member가 added되는 순간을 감시. imp…