Node.js에서 Elixir/Phoenix의 채널에 연결

Phoenix Channel에 Node.js에서 액세스해보십시오.

이와테 현립 대학 어드벤트 캘린더에 삽입했습니다.



화면 왼쪽이 Phoenix Channel에서 만드는 채팅, 오른쪽 터미널이 Node.js의 프로세스입니다.

Phoenix Channel의 Node.js Client



phoenix-channels 을 사용했습니다.
npm i --save phoenix-channels

app.js
'use strict';

const { Socket } = require('phoenix-channels')
const socket = new Socket("ws://localhost:4000/socket");
socket.connect();
const channel = socket.channel("chat:lobby", {});

channel.join()
    .receive('ok', resp => console.log(`> joining channel  ${channel.topic}`))
    .receive("error", reason => console.log(`Error joining channel:`, reason));

channel.on("new_msg", msg => console.log(msg));

channel.onError(e => console.log("something went wrong", e))

이것만으로 연결할 수 있습니다.
간단.

빠진 곳



여기까지 가는 것에 비해 빠졌습니다.
const socket = new Socket("ws://localhost:4000/socket");

하는 곳
const socket = new Socket("ws://localhost:4000");

라고 지정한 것이 문제였습니다.
[debug] ** (Phoenix.Router.NoRouteError) no route found for GET /websocket (DemoWeb.Router)

등의 로그가 나왔지만 깔끔했습니다.
  • elixir-phoenix-websocket-error
  • Websocket Clients and Phoenix Channels

  • 이 근처를 보면 endpoint.ex
    socket "/socket", MyAppWeb.UserSocket
    

    의 설명이 WebSocket의 경로를 지정하고 있는 개소라고 알 수 있습니다.

    좋은 웹페이지 즐겨찾기