Skip to content

信道服务

techirdliu edited this page Nov 20, 2016 · 8 revisions

微信小程序提供了 WebSocket 的通信能力,结合 Wafer 提供的信道服务,开发者可以迅速拥有实时双工的 WebSocket 通信能力。

信道服务共有三个模块参与协作进行通信:

  • 微信小程序客户端:需要 SDK 支持,可参考 Demo 实现
  • 业务服务器:需使用服务端 SDK,包括 JavaPHPC#Node 四个语言
  • 信道服务器:以 PaaS 服务的形式提供

信道服务通信大致有四个时序流程,分别是:建立连接、消息推送及断开连接。

建立连接

建立连接时序

建立连接是通信的第一步。

建立连接步骤如下:

  • 小程序客户端向信道服务器申请进行信道连接,如果已经登录,则会在请求头包含 idskey
  • 业务服务器收到申请请求后
    • 如果请求头包含 idskey,会通过会话服务获取用户信息 userInfo
    • 向信道服务器申请连接地址,并告知信道服务器后续对应的通信地址 receiverUrl
  • 信道服务器返回信道标识 tunnelId 和信道连接地址 connectUrl
  • 业务服务器调用信道处理器onTunnelRequest() 方法通知连接已请求
  • 业务服务器返回连接地址到客户端
  • 客户端使用连接地址进行 WebSocket 连接后建立起双工 TCP 连接
  • 信道服务器在建立连接后,会根据连接的 tunnelId 找到对应的 receiverUrl,通过该地址推送连接消息到业务服务器
  • 业务服务器调用信道处理器onTunnelConnect() 方法通知连接已建立

建立的 WebSocket 连接可以和会话关联,会话实现细节请参考会话服务

消息推送

消息推送

建立连接后,微信小程序客户端和信道服务器可以相互推送消息。由于信道服务器只作为通用的 PaaS 服务,其本身不对消息做处理,只是作为消息推送的搬运工,具体消息由业务服务器交给信道处理器进行处理。

断开连接

断开连接

当连接断开或微信小程序客户端请求断开时,信道服务器会向业务服务器推送断开消息。业务服务器也可以主动请求信道服务器断开与小程序的连接。

信道处理器

信道处理器是使用服务器 SDK 进行信道服务时需要提供的实例,用于处理信道事件,包括请求、连接、消息、断开。

  • onTunnelRequest() - 当用户发起信道请求的时候,会得到用户信息,此时可以关联信道 ID 和用户信息
  • onTunnelConnect() - 当用户建立了信道连接之后,可以记录下已经连接的信道
  • onTunnelMessage() - 当用户消息发送到信道上时,使用该函数处理信道的消息
  • onTunnelClose() - 当信道关闭时,清理关于该信道的信息,以及回收相关资源