信道服务

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() - 当信道关闭时,清理关于该信道的信息,以及回收相关资源
You can’t perform that action at this time.
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session.
Press h to open a hovercard with more details.