phoenix学习笔记(channel)

1. 信息流:

 2. 在endpoint.ex里要进行声明:用哪一个socket handler进行处理

socket "/socket", HelloWeb.UserSocket,
  websocket: true,
  longpoll: false

3. socket handler里(类似router):

   

channel "room:*", HelloWeb.RoomChannel

当客户端发送"room:"topic的消息时,将会由room_channel.ex处理

4. Channels: 处理来自客户端的events, join,terminate, handle_in, handle_out

  4.1 joining channels:

     

// assets/js/socket.js
...
socket.connect()

// Now that you are connected, you can join channels with a topic:
let channel = socket.channel("room:lobby", {})
channel.join()
  .receive("ok", resp => { console.log("Joined successfully", resp) })
  .receive("error", resp => { console.log("Unable to join", resp) })

export default socket

4.2 Incoming Events

    

 def handle_in("new_msg", %{"body" => body}, socket) do
    broadcast!(socket, "new_msg", %{body: body})
    {:noreply, socket}
  end

4.3 Intercepting Outgoing Events (拦截outgoing event)

4.4 socket assigns

4.5 token authentication  

5. Topics

6. Message: 结构体,包含:

  

  • :topic - The string topic or topic:subtopic pair namespace, for example “messages”, “messages:123”
  • :event- The string event name, for example “phx_join”
  • :payload - The message payload
  • :ref - The unique string ref
  • :join_ref - The unique string ref when joining

7.PubSub:

猜你喜欢

转载自www.cnblogs.com/shirley18/p/10563886.html