Appearance
中继服务
说明:主要对中继服务进行一些基础操作,例如终端上线、保活PING、通过中继发送和接收消息等。
因为我们需要实现不依赖任何服务器的直连,所以我们的连接传输架构里面不能依赖服务器来完成连接,终端根据条件可以在没有任何服务器辅助的情况下与另一终端建立连接
中继示意图
diagram
PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB2ZXJzaW9uPSIxLjEiIHdpZHRoPSI2MzFweCIgaGVpZ2h0PSIzMTFweCIgdmlld0JveD0iLTAuNSAtMC41IDYzMSAzMTEiIGNvbnRlbnQ9IiZsdDtteGZpbGUgaG9zdD0mcXVvdDtlbWJlZC5kaWFncmFtcy5uZXQmcXVvdDsgbW9kaWZpZWQ9JnF1b3Q7MjAyNC0wNi0yOVQwNjo1NTo0MS4yMTBaJnF1b3Q7IGFnZW50PSZxdW90O01vemlsbGEvNS4wIChXaW5kb3dzIE5UIDEwLjA7IFdpbjY0OyB4NjQpIEFwcGxlV2ViS2l0LzUzNy4zNiAoS0hUTUwsIGxpa2UgR2Vja28pIENocm9tZS8xMjYuMC4wLjAgU2FmYXJpLzUzNy4zNiBFZGcvMTI2LjAuMC4wJnF1b3Q7IHZlcnNpb249JnF1b3Q7MjQuNi40JnF1b3Q7IGV0YWc9JnF1b3Q7ZElfekI3UDN1engzbDJGRkRiMG0mcXVvdDsgdHlwZT0mcXVvdDtlbWJlZCZxdW90OyZndDsmbHQ7ZGlhZ3JhbSBpZD0mcXVvdDtDQ0RNVnlJdVg3My1VM3lJM1BIYyZxdW90OyBuYW1lPSZxdW90O+esrCAxIOmhtSZxdW90OyZndDs1VmROajlzZ0VQMDFITHN5SnY0NjJvblRIbHBwMVQyMFBib3hhN3NseGlWNFkvZlhkekQ0YTUxZFJkMXRObEtsU0dFZU16QThIZ05HWkwxdjNvdWt5ai94bERKa1cybUR5QWJaTmlhK0MzOEthVFhpK1k0R01sR2t4bWtFN29yZjFJQ1dRZXNpcFllWm8rU2N5YUthZ3p0ZWxuUW5aMWdpQkQvTzNlNDVtODlhSlJsZEFIZTdoQzNSTDBVcWM0MzZ0amZpSDJpUjVmM00yQTEweno3cG5jMUtEbm1TOHVNRUlqRWlhOEc1MUsxOXM2Wk1rZGZ6b3VPMlQvUU9pUWxheW5NQ1ZqcmdJV0cxV1J1eVhRYWgwWGRvWktyUkEvY2Nob1NNWld0b2NIL1Z2Tzk0ZCtnMktRUUg3RmVORGpQOXcwQ3hneUtNZkVzMWdxMzZ4UjZLTmlqQXFoRkVLRnFoMkVjUmRNWDlySkM2bm5pZURNQ1RCTzFaWGpaTlliZU15WVhNZWNiTGhNVWpHZ2xlbHlsVkhGaGdqVDRmT2E4QXhBRCtvRksyUm5wSkxUbEF1ZHd6MHd2MGl2YXJpZStNYjhxNGNYcHowMHc3TjYyeERsTHduNE5vc0haSVE2VkpzRXRlVW8xc0M4Wm1JV3ZPdU9pV1J5d3JDQ3pWczZ2Rnc3Q0lRVW5LdUdmOEdKWUZ5SzNncFVsWjA2UzRlVklyQmpyd1d1eU1sMjJPVnlJeWFyeklvRk00NEpUdktTd1FYQVJsTU4zRGZQVEVuTFJzOEJ2RkNBMmp4OVBhRFA2M2pRMkM3WmFRNmNiaWN6YVdOb1hzTXI3eFBNZllPbW5MOTQwOVpxMk1kbUxjVWxIQTFsQmhzRmVUaWZ0Q21YU2hRR0RTVGh3cVhwVHlNQm41VmdIZzBOOHRIdEVqbXB2RmRoL1Z2MGYraEZqUCtVTkRaekFLZGxqS1dScTJsL1ZWMWJ3SXdjNUFJNHhRdUEyWE9tY01yaktsbUdOZVNIcFhKUjNQUjdoTjUybzFvMU1oYWZQOGRpMDN3Z1Q0Y3dMSXl0akg4V0xEL1cyVlR5NjFQdTRsSjV5Y3djNko4bjVCZHB6Z0RlbnBuenRYVVFHdnYvN2hXZTF6bnExOGYxZmwzTGU3RE4wVFIyV0ZJaCtGRzNObVFnL0ZMZ3JXeU4rb0I1WWZvaEIzTDYwQWhYQ2NpSHA0QmRabjNEZnhVbHdYUEZpTHdvc3ZlTEM4MXlMVHZnNHlzVHNuRXpzWEpOTi9MVExKZFpDNXdxczVtZjlRbVdDTzMzcjZlVEYrTVpQNER3PT0mbHQ7L2RpYWdyYW0mZ3Q7Jmx0Oy9teGZpbGUmZ3Q7Ij48ZGVmcz48c3R5bGU+QGtleWZyYW1lcyBnZS1mbG93LWFuaW1hdGlvbi1ZQzhTMXZMVnBEVUVPQ185QnVGcCB7JiN4YTsgIHRvIHsmI3hhOyAgICBzdHJva2UtZGFzaG9mZnNldDogMDsmI3hhOyAgfSYjeGE7fTwvc3R5bGU+PC9kZWZzPjxnPjxnIGRhdGEtY2VsbC1pZD0iMCI+PGcgZGF0YS1jZWxsLWlkPSIxIj48ZyBkYXRhLWNlbGwtaWQ9IjQiPjxnPjxwYXRoIGQ9Ik0gMTIwIDI3MCBMIDUxMCAyNzAiIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzAwOTkwMCIgc3Ryb2tlLXdpZHRoPSIxMCIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIiBwb2ludGVyLWV2ZW50cz0ic3Ryb2tlIiBzdHJva2UtZGFzaGFycmF5PSI4IiBzdHlsZT0iYW5pbWF0aW9uOiA1MDBtcyBsaW5lYXIgMHMgaW5maW5pdGUgbm9ybWFsIG5vbmUgcnVubmluZyBnZS1mbG93LWFuaW1hdGlvbi1ZQzhTMXZMVnBEVUVPQ185QnVGcDsgc3Ryb2tlLWRhc2hvZmZzZXQ6IDE2OyIvPjwvZz48Zz48ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtMC41IC0wLjUpIj48c3dpdGNoPjxmb3JlaWduT2JqZWN0IHBvaW50ZXItZXZlbnRzPSJub25lIiB3aWR0aD0iMTAwJSIgaGVpZ2h0PSIxMDAlIiByZXF1aXJlZEZlYXR1cmVzPSJodHRwOi8vd3d3LnczLm9yZy9UUi9TVkcxMS9mZWF0dXJlI0V4dGVuc2liaWxpdHkiIHN0eWxlPSJvdmVyZmxvdzogdmlzaWJsZTsgdGV4dC1hbGlnbjogbGVmdDsiPjxkaXYgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiIHN0eWxlPSJkaXNwbGF5OiBmbGV4OyBhbGlnbi1pdGVtczogdW5zYWZlIGNlbnRlcjsganVzdGlmeS1jb250ZW50OiB1bnNhZmUgY2VudGVyOyB3aWR0aDogMXB4OyBoZWlnaHQ6IDFweDsgcGFkZGluZy10b3A6IDI3MHB4OyBtYXJnaW4tbGVmdDogMzE1cHg7Ij48ZGl2IGRhdGEtZHJhd2lvLWNvbG9ycz0iY29sb3I6IHJnYigwLCAwLCAwKTsgYmFja2dyb3VuZC1jb2xvcjogcmdiKDI1NSwgMjU1LCAyNTUpOyAiIHN0eWxlPSJib3gtc2l6aW5nOiBib3JkZXItYm94OyBmb250LXNpemU6IDBweDsgdGV4dC1hbGlnbjogY2VudGVyOyI+PGRpdiBzdHlsZT0iZGlzcGxheTogaW5saW5lLWJsb2NrOyBmb250LXNpemU6IDExcHg7IGZvbnQtZmFtaWx5OiBIZWx2ZXRpY2E7IGNvbG9yOiByZ2IoMCwgMCwgMCk7IGxpbmUtaGVpZ2h0OiAxLjI7IHBvaW50ZXItZXZlbnRzOiBhbGw7IGJhY2tncm91bmQtY29sb3I6IHJnYigyNTUsIDI1NSwgMjU1KTsgd2hpdGUtc3BhY2U6IG5vd3JhcDsiPjxiPjxmb250IHN0eWxlPSJmb250LXNpemU6IDE4cHg7Ij7lsYDln5/nvZHnm7Tov548L2ZvbnQ+PC9iPjwvZGl2PjwvZGl2PjwvZGl2PjwvZm9yZWlnbk9iamVjdD48dGV4dCB4PSIzMTUiIHk9IjI3MyIgZmlsbD0icmdiKDAsIDAsIDApIiBmb250LWZhbWlseT0iJnF1b3Q7SGVsdmV0aWNhJnF1b3Q7IiBmb250LXNpemU9IjExcHgiIHRleHQtYW5jaG9yPSJtaWRkbGUiPuWxgOWfn+e9keebtOi/njwvdGV4dD48L3N3aXRjaD48L2c+PC9nPjwvZz48ZyBkYXRhLWNlbGwtaWQ9IjkiPjxnPjxwYXRoIGQ9Ik0gOTMgMjM3LjA0IFEgOTMgMTUwIDE3MS41IDE1MCBRIDI1MCAxNTAgMjUwIDE0MCIgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjOTlmZjMzIiBzdHJva2Utd2lkdGg9IjEwIiBzdHJva2UtbWl0ZXJsaW1pdD0iMTAiIHBvaW50ZXItZXZlbnRzPSJzdHJva2UiIHN0cm9rZS1kYXNoYXJyYXk9IjgiIHN0eWxlPSJhbmltYXRpb246IDUwMG1zIGxpbmVhciAwcyBpbmZpbml0ZSBub3JtYWwgbm9uZSBydW5uaW5nIGdlLWZsb3ctYW5pbWF0aW9uLVlDOFMxdkxWcERVRU9DXzlCdUZwOyBzdHJva2UtZGFzaG9mZnNldDogMTY7Ii8+PC9nPjwvZz48ZyBkYXRhLWNlbGwtaWQ9IjIiPjxnPjxlbGxpcHNlIGN4PSI2MCIgY3k9IjI3MCIgcng9IjYwIiByeT0iNDAiIGZpbGw9InJnYigyNTUsIDI1NSwgMjU1KSIgc3Ryb2tlPSJyZ2IoMCwgMCwgMCkiIHBvaW50ZXItZXZlbnRzPSJhbGwiLz48L2c+PGc+PGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTAuNSAtMC41KSI+PHN3aXRjaD48Zm9yZWlnbk9iamVjdCBwb2ludGVyLWV2ZW50cz0ibm9uZSIgd2lkdGg9IjEwMCUiIGhlaWdodD0iMTAwJSIgcmVxdWlyZWRGZWF0dXJlcz0iaHR0cDovL3d3dy53My5vcmcvVFIvU1ZHMTEvZmVhdHVyZSNFeHRlbnNpYmlsaXR5IiBzdHlsZT0ib3ZlcmZsb3c6IHZpc2libGU7IHRleHQtYWxpZ246IGxlZnQ7Ij48ZGl2IHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiBzdHlsZT0iZGlzcGxheTogZmxleDsgYWxpZ24taXRlbXM6IHVuc2FmZSBjZW50ZXI7IGp1c3RpZnktY29udGVudDogdW5zYWZlIGNlbnRlcjsgd2lkdGg6IDExOHB4OyBoZWlnaHQ6IDFweDsgcGFkZGluZy10b3A6IDI3MHB4OyBtYXJnaW4tbGVmdDogMXB4OyI+PGRpdiBkYXRhLWRyYXdpby1jb2xvcnM9ImNvbG9yOiByZ2IoMCwgMCwgMCk7ICIgc3R5bGU9ImJveC1zaXppbmc6IGJvcmRlci1ib3g7IGZvbnQtc2l6ZTogMHB4OyB0ZXh0LWFsaWduOiBjZW50ZXI7Ij48ZGl2IHN0eWxlPSJkaXNwbGF5OiBpbmxpbmUtYmxvY2s7IGZvbnQtc2l6ZTogMTJweDsgZm9udC1mYW1pbHk6IEhlbHZldGljYTsgY29sb3I6IHJnYigwLCAwLCAwKTsgbGluZS1oZWlnaHQ6IDEuMjsgcG9pbnRlci1ldmVudHM6IGFsbDsgd2hpdGUtc3BhY2U6IG5vcm1hbDsgb3ZlcmZsb3ctd3JhcDogbm9ybWFsOyI+57uI56uvQTwvZGl2PjwvZGl2PjwvZGl2PjwvZm9yZWlnbk9iamVjdD48dGV4dCB4PSI2MCIgeT0iMjc0IiBmaWxsPSJyZ2IoMCwgMCwgMCkiIGZvbnQtZmFtaWx5PSImcXVvdDtIZWx2ZXRpY2EmcXVvdDsiIGZvbnQtc2l6ZT0iMTJweCIgdGV4dC1hbmNob3I9Im1pZGRsZSI+57uI56uvQTwvdGV4dD48L3N3aXRjaD48L2c+PC9nPjwvZz48ZyBkYXRhLWNlbGwtaWQ9IjMiPjxnPjxlbGxpcHNlIGN4PSI1NzAiIGN5PSIyNzAiIHJ4PSI2MCIgcnk9IjQwIiBmaWxsPSJyZ2IoMjU1LCAyNTUsIDI1NSkiIHN0cm9rZT0icmdiKDAsIDAsIDApIiBwb2ludGVyLWV2ZW50cz0iYWxsIi8+PC9nPjxnPjxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKC0wLjUgLTAuNSkiPjxzd2l0Y2g+PGZvcmVpZ25PYmplY3QgcG9pbnRlci1ldmVudHM9Im5vbmUiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIHJlcXVpcmVkRmVhdHVyZXM9Imh0dHA6Ly93d3cudzMub3JnL1RSL1NWRzExL2ZlYXR1cmUjRXh0ZW5zaWJpbGl0eSIgc3R5bGU9Im92ZXJmbG93OiB2aXNpYmxlOyB0ZXh0LWFsaWduOiBsZWZ0OyI+PGRpdiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIgc3R5bGU9ImRpc3BsYXk6IGZsZXg7IGFsaWduLWl0ZW1zOiB1bnNhZmUgY2VudGVyOyBqdXN0aWZ5LWNvbnRlbnQ6IHVuc2FmZSBjZW50ZXI7IHdpZHRoOiAxMThweDsgaGVpZ2h0OiAxcHg7IHBhZGRpbmctdG9wOiAyNzBweDsgbWFyZ2luLWxlZnQ6IDUxMXB4OyI+PGRpdiBkYXRhLWRyYXdpby1jb2xvcnM9ImNvbG9yOiByZ2IoMCwgMCwgMCk7ICIgc3R5bGU9ImJveC1zaXppbmc6IGJvcmRlci1ib3g7IGZvbnQtc2l6ZTogMHB4OyB0ZXh0LWFsaWduOiBjZW50ZXI7Ij48ZGl2IHN0eWxlPSJkaXNwbGF5OiBpbmxpbmUtYmxvY2s7IGZvbnQtc2l6ZTogMTJweDsgZm9udC1mYW1pbHk6IEhlbHZldGljYTsgY29sb3I6IHJnYigwLCAwLCAwKTsgbGluZS1oZWlnaHQ6IDEuMjsgcG9pbnRlci1ldmVudHM6IGFsbDsgd2hpdGUtc3BhY2U6IG5vcm1hbDsgb3ZlcmZsb3ctd3JhcDogbm9ybWFsOyI+57uI56uvQjwvZGl2PjwvZGl2PjwvZGl2PjwvZm9yZWlnbk9iamVjdD48dGV4dCB4PSI1NzAiIHk9IjI3NCIgZmlsbD0icmdiKDAsIDAsIDApIiBmb250LWZhbWlseT0iJnF1b3Q7SGVsdmV0aWNhJnF1b3Q7IiBmb250LXNpemU9IjEycHgiIHRleHQtYW5jaG9yPSJtaWRkbGUiPue7iOerr0I8L3RleHQ+PC9zd2l0Y2g+PC9nPjwvZz48L2c+PGcgZGF0YS1jZWxsLWlkPSIxMCI+PGc+PHBhdGggZD0iTSAzNzAgMTQwIFEgNTI3LjYgMTQwIDUyNy41NyAyNDEuNzIiIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzk5ZmYzMyIgc3Ryb2tlLXdpZHRoPSIxMCIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIiBwb2ludGVyLWV2ZW50cz0ic3Ryb2tlIiBzdHJva2UtZGFzaGFycmF5PSI4IiBzdHlsZT0iYW5pbWF0aW9uOiA1MDBtcyBsaW5lYXIgMHMgaW5maW5pdGUgbm9ybWFsIG5vbmUgcnVubmluZyBnZS1mbG93LWFuaW1hdGlvbi1ZQzhTMXZMVnBEVUVPQ185QnVGcDsgc3Ryb2tlLWRhc2hvZmZzZXQ6IDE2OyIvPjwvZz48L2c+PGcgZGF0YS1jZWxsLWlkPSI2Ij48Zz48ZWxsaXBzZSBjeD0iMzEwIiBjeT0iMTQwIiByeD0iNjAiIHJ5PSI0MCIgZmlsbD0icmdiKDI1NSwgMjU1LCAyNTUpIiBzdHJva2U9InJnYigwLCAwLCAwKSIgcG9pbnRlci1ldmVudHM9ImFsbCIvPjwvZz48Zz48ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtMC41IC0wLjUpIj48c3dpdGNoPjxmb3JlaWduT2JqZWN0IHBvaW50ZXItZXZlbnRzPSJub25lIiB3aWR0aD0iMTAwJSIgaGVpZ2h0PSIxMDAlIiByZXF1aXJlZEZlYXR1cmVzPSJodHRwOi8vd3d3LnczLm9yZy9UUi9TVkcxMS9mZWF0dXJlI0V4dGVuc2liaWxpdHkiIHN0eWxlPSJvdmVyZmxvdzogdmlzaWJsZTsgdGV4dC1hbGlnbjogbGVmdDsiPjxkaXYgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiIHN0eWxlPSJkaXNwbGF5OiBmbGV4OyBhbGlnbi1pdGVtczogdW5zYWZlIGNlbnRlcjsganVzdGlmeS1jb250ZW50OiB1bnNhZmUgY2VudGVyOyB3aWR0aDogMTE4cHg7IGhlaWdodDogMXB4OyBwYWRkaW5nLXRvcDogMTQwcHg7IG1hcmdpbi1sZWZ0OiAyNTFweDsiPjxkaXYgZGF0YS1kcmF3aW8tY29sb3JzPSJjb2xvcjogcmdiKDAsIDAsIDApOyAiIHN0eWxlPSJib3gtc2l6aW5nOiBib3JkZXItYm94OyBmb250LXNpemU6IDBweDsgdGV4dC1hbGlnbjogY2VudGVyOyI+PGRpdiBzdHlsZT0iZGlzcGxheTogaW5saW5lLWJsb2NrOyBmb250LXNpemU6IDEycHg7IGZvbnQtZmFtaWx5OiBIZWx2ZXRpY2E7IGNvbG9yOiByZ2IoMCwgMCwgMCk7IGxpbmUtaGVpZ2h0OiAxLjI7IHBvaW50ZXItZXZlbnRzOiBhbGw7IHdoaXRlLXNwYWNlOiBub3JtYWw7IG92ZXJmbG93LXdyYXA6IG5vcm1hbDsiPuS4ree7p+acjeWKoeWZqOOAkFIx44CRPC9kaXY+PC9kaXY+PC9kaXY+PC9mb3JlaWduT2JqZWN0Pjx0ZXh0IHg9IjMxMCIgeT0iMTQ0IiBmaWxsPSJyZ2IoMCwgMCwgMCkiIGZvbnQtZmFtaWx5PSImcXVvdDtIZWx2ZXRpY2EmcXVvdDsiIGZvbnQtc2l6ZT0iMTJweCIgdGV4dC1hbmNob3I9Im1pZGRsZSI+5Lit57un5pyN5Yqh5Zmo44CQUjHjgJE8L3RleHQ+PC9zd2l0Y2g+PC9nPjwvZz48L2c+PGcgZGF0YS1jZWxsLWlkPSI3Ij48Zz48ZWxsaXBzZSBjeD0iMTQwIiBjeT0iODAiIHJ4PSI2MCIgcnk9IjQwIiBmaWxsPSJyZ2IoMjU1LCAyNTUsIDI1NSkiIHN0cm9rZT0icmdiKDAsIDAsIDApIiBwb2ludGVyLWV2ZW50cz0iYWxsIi8+PC9nPjxnPjxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKC0wLjUgLTAuNSkiPjxzd2l0Y2g+PGZvcmVpZ25PYmplY3QgcG9pbnRlci1ldmVudHM9Im5vbmUiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIHJlcXVpcmVkRmVhdHVyZXM9Imh0dHA6Ly93d3cudzMub3JnL1RSL1NWRzExL2ZlYXR1cmUjRXh0ZW5zaWJpbGl0eSIgc3R5bGU9Im92ZXJmbG93OiB2aXNpYmxlOyB0ZXh0LWFsaWduOiBsZWZ0OyI+PGRpdiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIgc3R5bGU9ImRpc3BsYXk6IGZsZXg7IGFsaWduLWl0ZW1zOiB1bnNhZmUgY2VudGVyOyBqdXN0aWZ5LWNvbnRlbnQ6IHVuc2FmZSBjZW50ZXI7IHdpZHRoOiAxMThweDsgaGVpZ2h0OiAxcHg7IHBhZGRpbmctdG9wOiA4MHB4OyBtYXJnaW4tbGVmdDogODFweDsiPjxkaXYgZGF0YS1kcmF3aW8tY29sb3JzPSJjb2xvcjogcmdiKDAsIDAsIDApOyAiIHN0eWxlPSJib3gtc2l6aW5nOiBib3JkZXItYm94OyBmb250LXNpemU6IDBweDsgdGV4dC1hbGlnbjogY2VudGVyOyI+PGRpdiBzdHlsZT0iZGlzcGxheTogaW5saW5lLWJsb2NrOyBmb250LXNpemU6IDEycHg7IGZvbnQtZmFtaWx5OiBIZWx2ZXRpY2E7IGNvbG9yOiByZ2IoMCwgMCwgMCk7IGxpbmUtaGVpZ2h0OiAxLjI7IHBvaW50ZXItZXZlbnRzOiBhbGw7IHdoaXRlLXNwYWNlOiBub3JtYWw7IG92ZXJmbG93LXdyYXA6IG5vcm1hbDsiPuS4ree7p+acjeWKoeWZqOOAkFIy44CRPC9kaXY+PC9kaXY+PC9kaXY+PC9mb3JlaWduT2JqZWN0Pjx0ZXh0IHg9IjE0MCIgeT0iODQiIGZpbGw9InJnYigwLCAwLCAwKSIgZm9udC1mYW1pbHk9IiZxdW90O0hlbHZldGljYSZxdW90OyIgZm9udC1zaXplPSIxMnB4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj7kuK3nu6fmnI3liqHlmajjgJBSMuOAkTwvdGV4dD48L3N3aXRjaD48L2c+PC9nPjwvZz48ZyBkYXRhLWNlbGwtaWQ9IjgiPjxnPjxlbGxpcHNlIGN4PSIzOTQiIGN5PSI0MCIgcng9IjYwIiByeT0iNDAiIGZpbGw9InJnYigyNTUsIDI1NSwgMjU1KSIgc3Ryb2tlPSJyZ2IoMCwgMCwgMCkiIHBvaW50ZXItZXZlbnRzPSJhbGwiLz48L2c+PGc+PGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTAuNSAtMC41KSI+PHN3aXRjaD48Zm9yZWlnbk9iamVjdCBwb2ludGVyLWV2ZW50cz0ibm9uZSIgd2lkdGg9IjEwMCUiIGhlaWdodD0iMTAwJSIgcmVxdWlyZWRGZWF0dXJlcz0iaHR0cDovL3d3dy53My5vcmcvVFIvU1ZHMTEvZmVhdHVyZSNFeHRlbnNpYmlsaXR5IiBzdHlsZT0ib3ZlcmZsb3c6IHZpc2libGU7IHRleHQtYWxpZ246IGxlZnQ7Ij48ZGl2IHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiBzdHlsZT0iZGlzcGxheTogZmxleDsgYWxpZ24taXRlbXM6IHVuc2FmZSBjZW50ZXI7IGp1c3RpZnktY29udGVudDogdW5zYWZlIGNlbnRlcjsgd2lkdGg6IDExOHB4OyBoZWlnaHQ6IDFweDsgcGFkZGluZy10b3A6IDQwcHg7IG1hcmdpbi1sZWZ0OiAzMzVweDsiPjxkaXYgZGF0YS1kcmF3aW8tY29sb3JzPSJjb2xvcjogcmdiKDAsIDAsIDApOyAiIHN0eWxlPSJib3gtc2l6aW5nOiBib3JkZXItYm94OyBmb250LXNpemU6IDBweDsgdGV4dC1hbGlnbjogY2VudGVyOyI+PGRpdiBzdHlsZT0iZGlzcGxheTogaW5saW5lLWJsb2NrOyBmb250LXNpemU6IDEycHg7IGZvbnQtZmFtaWx5OiBIZWx2ZXRpY2E7IGNvbG9yOiByZ2IoMCwgMCwgMCk7IGxpbmUtaGVpZ2h0OiAxLjI7IHBvaW50ZXItZXZlbnRzOiBhbGw7IHdoaXRlLXNwYWNlOiBub3JtYWw7IG92ZXJmbG93LXdyYXA6IG5vcm1hbDsiPuS4ree7p+acjeWKoeWZqOOAkFIz44CRPC9kaXY+PC9kaXY+PC9kaXY+PC9mb3JlaWduT2JqZWN0Pjx0ZXh0IHg9IjM5NCIgeT0iNDQiIGZpbGw9InJnYigwLCAwLCAwKSIgZm9udC1mYW1pbHk9IiZxdW90O0hlbHZldGljYSZxdW90OyIgZm9udC1zaXplPSIxMnB4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj7kuK3nu6fmnI3liqHlmajjgJBSM+OAkTwvdGV4dD48L3N3aXRjaD48L2c+PC9nPjwvZz48L2c+PC9nPjwvZz48c3dpdGNoPjxnIHJlcXVpcmVkRmVhdHVyZXM9Imh0dHA6Ly93d3cudzMub3JnL1RSL1NWRzExL2ZlYXR1cmUjRXh0ZW5zaWJpbGl0eSIvPjxhIHRyYW5zZm9ybT0idHJhbnNsYXRlKDAsLTUpIiB4bGluazpocmVmPSJodHRwczovL3d3dy5kcmF3aW8uY29tL2RvYy9mYXEvc3ZnLWV4cG9ydC10ZXh0LXByb2JsZW1zIiB0YXJnZXQ9Il9ibGFuayI+PHRleHQgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxMHB4IiB4PSI1MCUiIHk9IjEwMCUiPlRleHQgaXMgbm90IFNWRyAtIGNhbm5vdCBkaXNwbGF5PC90ZXh0PjwvYT48L3N3aXRjaD48L3N2Zz4=终端通过中继发起通信的流程
终端A上线
diagram
PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB2ZXJzaW9uPSIxLjEiIHdpZHRoPSI1MjZweCIgaGVpZ2h0PSIyOTFweCIgdmlld0JveD0iLTAuNSAtMC41IDUyNiAyOTEiIGNvbnRlbnQ9IiZsdDtteGZpbGUgaG9zdD0mcXVvdDtlbWJlZC5kaWFncmFtcy5uZXQmcXVvdDsgbW9kaWZpZWQ9JnF1b3Q7MjAyNC0xMS0wMVQwNzo0NTozNi40NzFaJnF1b3Q7IGFnZW50PSZxdW90O01vemlsbGEvNS4wIChXaW5kb3dzIE5UIDEwLjA7IFdpbjY0OyB4NjQpIEFwcGxlV2ViS2l0LzUzNy4zNiAoS0hUTUwsIGxpa2UgR2Vja28pIENocm9tZS8xMjkuMC4wLjAgU2FmYXJpLzUzNy4zNiBFZGcvMTI5LjAuMC4wJnF1b3Q7IGV0YWc9JnF1b3Q7Z2duNVVaNVdhUjJ2MGY0TXlrQV8mcXVvdDsgdmVyc2lvbj0mcXVvdDsyNC42LjQmcXVvdDsgdHlwZT0mcXVvdDtlbWJlZCZxdW90OyZndDsmbHQ7ZGlhZ3JhbSBpZD0mcXVvdDtDQ0RNVnlJdVg3My1VM3lJM1BIYyZxdW90OyBuYW1lPSZxdW90O+esrCAxIOmhtSZxdW90OyZndDs3VmpKanRzNEVQMGFJak9IYm1oeGF6bEtYaElNMGtEUUhTRFRSMXFpWlNZMHFWRDBObDgvUlpIYVlqbHhnSFRhQ1FJZlRENFd5YXBpdWQ2RGtUL2RIRjVMWEs3dlJVNFk4cHo4Z1B3WjhqelhkUUw0MHNqUklKRWJHcUNRTkxkR0hmQkkveU1XZEN5NnBUbXBCb1pLQ0tab09RUXp3VG5KMUFERFVvcjkwR3dsMlBEV0VoZmtCSGpNTUR0RlA5QmNyVzBVWHRqaGJ3Z3QxczNOYmhDYmxRMXVqRzBrMVJybll0K0QvRG55cDFJSVpVYWJ3NVF3bmJ3bUwyYmY0c3hxNjVna1hGMnl3ZnExdzJ4clkwTmV3R0JybXRPZDlrOGRiZERCNTYxMktsM2k3Rk1oeFpibk41bGdRaUkvUVo3dkxmVUhsbnNZanBkaEZuUTdZVlRZNy9xR1VwTFJHMWFDcTVzVjNsQUc1Wkc4K29lb1ZHTEtLekMrRjF5OFF0NTBBOTlWaVRQU21GZDFqU1R4YlZUYUs4NWNDcnY0NkswOXg1ZE9uSWZ4NkRHUFdYbFBxa3JYeDN5QjBpbUtrK1prU0xJNTNGZytrTSs5bFRyV0Z3ei9IVDR5Z2ZQM3g1SzhGUVhsNzhVRFlmaUlkSGw4SXpIOUM4Q2d1OFBacjZraU43VWp1aFlZTGl0cjFNM0dua0tmN3B4SjIvTzc0M1F2N2NoaStaZnJUQ0NsTUhIdlhEdUl3cjlIUFhlZGI3bDlCVTg5K0FHL29CK2xLVG13NFZ2ZGM3NldJRUJIM0wzTTFodUU1SkVjV3JXZENxbldvaEFjczNtSHBuWHpJcm9CT2pEcmJONEtVUUxvQXZpUktIVzB2SU8zU2dDMFZodG1WNkczeXVPL2RuODllZEtUMjd0bU9qdjBGMmRITzZ1VUZKOWF4bkNOUVo1b1FvSTVGNXdZWkVFWkcyeVptb3FGOFB3NFhpeDhYL2VycmR6VlFXaVBXaHJSZTFaTTdCTk9nV3VvNEkzTEI2cGFqMkg4MUJ0MzN1cEo0K3dwazFoeXFjUldaamJabmlWZkxBdGlyU3kxNjJmb2JiUHM4NXFJRFlHVWdJRVZBODZ0NDA4aXM2ZFJBNVliSlhRb1JYZER6c1dXdW92MnBQYndkNEtDcTUySldLMHE4S3BIZnpEbytkQkJOU21PRTZSM1NwRHpFS1VwaWlJOVNGS1VMSkxUSW1TTW1uNVRONlZIODhPWjdVRU9EVXZwYkpaM1JDcHl1Q1NEL3NRWnBHL1NhSXQ5SjAzY0JsdjNaRW1UNTdHVURqTDJsZlEwaXV5UGdIZ0dBVkdWVjBncmwxMXFDQjV2ZExsYmd5L2QrSExkY0cvZnNWcWFuMkg3cXhjNE5qaStyTW9oZWYzMmF1ZVhLOVlmTG5pK3AxY0VLN3hhNXFNSDFvV3MyNERnOEpwaGlzTFpEM3lRbDlkUlY2Q0htbkZQd0oxVlJLM3NhelhnVTMvbGpPaTdTRWNGcHpySysyNGROUW1DNjlWUndZaU9tcUEwUXNuTUNxb2tSUE1BeFZNVUFYS0hvZ1Fscmg3RU1VcEFhL2tJNG9tZEI3Y1p1cWNsK3pOVmx6OVVYYTBTZWdiVkJkUHVIeUdUKys1L05YLytQdz09Jmx0Oy9kaWFncmFtJmd0OyZsdDsvbXhmaWxlJmd0OyI+PGRlZnM+PHN0eWxlPkBrZXlmcmFtZXMgZ2UtZmxvdy1hbmltYXRpb24tZWF2amQweElTcE1UY0t2RDY5czkgeyYjeGE7ICB0byB7JiN4YTsgICAgc3Ryb2tlLWRhc2hvZmZzZXQ6IDA7JiN4YTsgIH0mI3hhO308L3N0eWxlPjwvZGVmcz48Zz48ZyBkYXRhLWNlbGwtaWQ9IjAiPjxnIGRhdGEtY2VsbC1pZD0iMSI+PGcgZGF0YS1jZWxsLWlkPSI5Ij48Zz48cGF0aCBkPSJNIDIyOC41NyAyMjEuNzIgUSAyMjguNiAxNDUgMjA0LjggMTQ1IFEgMTgxIDE0NSAxODEgOTIuNSBRIDE4MSA0MCAyMDEgNDAiIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzk5ZmYzMyIgc3Ryb2tlLXdpZHRoPSIxMCIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIiBwb2ludGVyLWV2ZW50cz0ic3Ryb2tlIiBzdHJva2UtZGFzaGFycmF5PSI4IiBzdHlsZT0iYW5pbWF0aW9uOiA1MDBtcyBsaW5lYXIgMHMgaW5maW5pdGUgbm9ybWFsIG5vbmUgcnVubmluZyBnZS1mbG93LWFuaW1hdGlvbi1lYXZqZDB4SVNwTVRjS3ZENjlzOTsgc3Ryb2tlLWRhc2hvZmZzZXQ6IDE2OyIvPjwvZz48Zz48ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtMC41IC0wLjUpIj48c3dpdGNoPjxmb3JlaWduT2JqZWN0IHBvaW50ZXItZXZlbnRzPSJub25lIiB3aWR0aD0iMTAwJSIgaGVpZ2h0PSIxMDAlIiByZXF1aXJlZEZlYXR1cmVzPSJodHRwOi8vd3d3LnczLm9yZy9UUi9TVkcxMS9mZWF0dXJlI0V4dGVuc2liaWxpdHkiIHN0eWxlPSJvdmVyZmxvdzogdmlzaWJsZTsgdGV4dC1hbGlnbjogbGVmdDsiPjxkaXYgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiIHN0eWxlPSJkaXNwbGF5OiBmbGV4OyBhbGlnbi1pdGVtczogdW5zYWZlIGNlbnRlcjsganVzdGlmeS1jb250ZW50OiB1bnNhZmUgY2VudGVyOyB3aWR0aDogMXB4OyBoZWlnaHQ6IDFweDsgcGFkZGluZy10b3A6IDE0MHB4OyBtYXJnaW4tbGVmdDogMTAxcHg7Ij48ZGl2IGRhdGEtZHJhd2lvLWNvbG9ycz0iY29sb3I6IHJnYigwLCAwLCAwKTsgYmFja2dyb3VuZC1jb2xvcjogcmdiKDI1NSwgMjU1LCAyNTUpOyAiIHN0eWxlPSJib3gtc2l6aW5nOiBib3JkZXItYm94OyBmb250LXNpemU6IDBweDsgdGV4dC1hbGlnbjogY2VudGVyOyI+PGRpdiBzdHlsZT0iZGlzcGxheTogaW5saW5lLWJsb2NrOyBmb250LXNpemU6IDExcHg7IGZvbnQtZmFtaWx5OiBIZWx2ZXRpY2E7IGNvbG9yOiByZ2IoMCwgMCwgMCk7IGxpbmUtaGVpZ2h0OiAxLjI7IHBvaW50ZXItZXZlbnRzOiBhbGw7IGJhY2tncm91bmQtY29sb3I6IHJnYigyNTUsIDI1NSwgMjU1KTsgd2hpdGUtc3BhY2U6IG5vd3JhcDsiPjxkaXYgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6IzJiMmIyYjtjb2xvcjojYTliN2M2Ij48cHJlIHN0eWxlPSJmb250LWZhbWlseTonSmV0QnJhaW5zIE1vbm8nLG1vbm9zcGFjZTtmb250LXNpemU6OS44cHQ7Ij48c3BhbiBzdHlsZT0iY29sb3I6I2IwOWQ3OTsiPlNjcE1lc3NhZ2XvvJo8L3NwYW4+UmVxPC9wcmU+PHByZSBzdHlsZT0iZm9udC1mYW1pbHk6J0pldEJyYWlucyBNb25vJyxtb25vc3BhY2U7Zm9udC1zaXplOjkuOHB0OyI+UGF5bG9hZFR5cGVMb2dpblRvUmVsYXkgPHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogOS44cHQ7IHdoaXRlLXNwYWNlLWNvbGxhcHNlOiBjb2xsYXBzZTsiPj0gPC9zcGFuPjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDkuOHB0OyB3aGl0ZS1zcGFjZS1jb2xsYXBzZTogY29sbGFwc2U7IGNvbG9yOiByZ2IoMTA0LCAxNTEsIDE4Nyk7Ij4xMDA8L3NwYW4+PC9wcmU+PHByZSBzdHlsZT0iZm9udC1mYW1pbHk6J0pldEJyYWlucyBNb25vJyxtb25vc3BhY2U7Zm9udC1zaXplOjkuOHB0OyI+PGRpdj48cHJlIHN0eWxlPSJmb250LWZhbWlseTonSmV0QnJhaW5zIE1vbm8nLG1vbm9zcGFjZTtmb250LXNpemU6OS44cHQ7Ij5wYXlsb2FkOm51bGw8L3ByZT48L2Rpdj48L3ByZT48L2Rpdj48L2Rpdj48L2Rpdj48L2Rpdj48L2ZvcmVpZ25PYmplY3Q+PHRleHQgeD0iMTAxIiB5PSIxNDQiIGZpbGw9InJnYigwLCAwLCAwKSIgZm9udC1mYW1pbHk9IiZxdW90O0hlbHZldGljYSZxdW90OyIgZm9udC1zaXplPSIxMXB4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj5TY3BNZXNzYWdl77yaUmVxLi4uPC90ZXh0Pjwvc3dpdGNoPjwvZz48L2c+PC9nPjxnIGRhdGEtY2VsbC1pZD0iMiI+PGc+PGVsbGlwc2UgY3g9IjI3MSIgY3k9IjI1MCIgcng9IjYwIiByeT0iNDAiIGZpbGw9InJnYigyNTUsIDI1NSwgMjU1KSIgc3Ryb2tlPSJyZ2IoMCwgMCwgMCkiIHBvaW50ZXItZXZlbnRzPSJhbGwiLz48L2c+PGc+PGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTAuNSAtMC41KSI+PHN3aXRjaD48Zm9yZWlnbk9iamVjdCBwb2ludGVyLWV2ZW50cz0ibm9uZSIgd2lkdGg9IjEwMCUiIGhlaWdodD0iMTAwJSIgcmVxdWlyZWRGZWF0dXJlcz0iaHR0cDovL3d3dy53My5vcmcvVFIvU1ZHMTEvZmVhdHVyZSNFeHRlbnNpYmlsaXR5IiBzdHlsZT0ib3ZlcmZsb3c6IHZpc2libGU7IHRleHQtYWxpZ246IGxlZnQ7Ij48ZGl2IHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiBzdHlsZT0iZGlzcGxheTogZmxleDsgYWxpZ24taXRlbXM6IHVuc2FmZSBjZW50ZXI7IGp1c3RpZnktY29udGVudDogdW5zYWZlIGNlbnRlcjsgd2lkdGg6IDExOHB4OyBoZWlnaHQ6IDFweDsgcGFkZGluZy10b3A6IDI1MHB4OyBtYXJnaW4tbGVmdDogMjEycHg7Ij48ZGl2IGRhdGEtZHJhd2lvLWNvbG9ycz0iY29sb3I6IHJnYigwLCAwLCAwKTsgIiBzdHlsZT0iYm94LXNpemluZzogYm9yZGVyLWJveDsgZm9udC1zaXplOiAwcHg7IHRleHQtYWxpZ246IGNlbnRlcjsiPjxkaXYgc3R5bGU9ImRpc3BsYXk6IGlubGluZS1ibG9jazsgZm9udC1zaXplOiAxMnB4OyBmb250LWZhbWlseTogSGVsdmV0aWNhOyBjb2xvcjogcmdiKDAsIDAsIDApOyBsaW5lLWhlaWdodDogMS4yOyBwb2ludGVyLWV2ZW50czogYWxsOyB3aGl0ZS1zcGFjZTogbm9ybWFsOyBvdmVyZmxvdy13cmFwOiBub3JtYWw7Ij57u4jnq69BPC9kaXY+PC9kaXY+PC9kaXY+PC9mb3JlaWduT2JqZWN0Pjx0ZXh0IHg9IjI3MSIgeT0iMjU0IiBmaWxsPSJyZ2IoMCwgMCwgMCkiIGZvbnQtZmFtaWx5PSImcXVvdDtIZWx2ZXRpY2EmcXVvdDsiIGZvbnQtc2l6ZT0iMTJweCIgdGV4dC1hbmNob3I9Im1pZGRsZSI+57uI56uvQTwvdGV4dD48L3N3aXRjaD48L2c+PC9nPjwvZz48ZyBkYXRhLWNlbGwtaWQ9IjEwIj48Zz48cGF0aCBkPSJNIDMyMSA0MCBRIDM0MSA0MCAzNDEgOTIuNSBRIDM0MSAxNDUgMzI3LjIgMTQ1IFEgMzEzLjQgMTQ1IDMxMy40MyAyMjEuNzIiIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzk5ZmYzMyIgc3Ryb2tlLXdpZHRoPSIxMCIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIiBwb2ludGVyLWV2ZW50cz0ic3Ryb2tlIiBzdHJva2UtZGFzaGFycmF5PSI4IiBzdHlsZT0iYW5pbWF0aW9uOiA1MDBtcyBsaW5lYXIgMHMgaW5maW5pdGUgbm9ybWFsIG5vbmUgcnVubmluZyBnZS1mbG93LWFuaW1hdGlvbi1lYXZqZDB4SVNwTVRjS3ZENjlzOTsgc3Ryb2tlLWRhc2hvZmZzZXQ6IDE2OyIvPjwvZz48Zz48ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtMC41IC0wLjUpIj48c3dpdGNoPjxmb3JlaWduT2JqZWN0IHBvaW50ZXItZXZlbnRzPSJub25lIiB3aWR0aD0iMTAwJSIgaGVpZ2h0PSIxMDAlIiByZXF1aXJlZEZlYXR1cmVzPSJodHRwOi8vd3d3LnczLm9yZy9UUi9TVkcxMS9mZWF0dXJlI0V4dGVuc2liaWxpdHkiIHN0eWxlPSJvdmVyZmxvdzogdmlzaWJsZTsgdGV4dC1hbGlnbjogbGVmdDsiPjxkaXYgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiIHN0eWxlPSJkaXNwbGF5OiBmbGV4OyBhbGlnbi1pdGVtczogdW5zYWZlIGNlbnRlcjsganVzdGlmeS1jb250ZW50OiB1bnNhZmUgY2VudGVyOyB3aWR0aDogMXB4OyBoZWlnaHQ6IDFweDsgcGFkZGluZy10b3A6IDE0MHB4OyBtYXJnaW4tbGVmdDogNDIxcHg7Ij48ZGl2IGRhdGEtZHJhd2lvLWNvbG9ycz0iY29sb3I6IHJnYigwLCAwLCAwKTsgYmFja2dyb3VuZC1jb2xvcjogcmdiKDI1NSwgMjU1LCAyNTUpOyAiIHN0eWxlPSJib3gtc2l6aW5nOiBib3JkZXItYm94OyBmb250LXNpemU6IDBweDsgdGV4dC1hbGlnbjogY2VudGVyOyI+PGRpdiBzdHlsZT0iZGlzcGxheTogaW5saW5lLWJsb2NrOyBmb250LXNpemU6IDExcHg7IGZvbnQtZmFtaWx5OiBIZWx2ZXRpY2E7IGNvbG9yOiByZ2IoMCwgMCwgMCk7IGxpbmUtaGVpZ2h0OiAxLjI7IHBvaW50ZXItZXZlbnRzOiBhbGw7IGJhY2tncm91bmQtY29sb3I6IHJnYigyNTUsIDI1NSwgMjU1KTsgd2hpdGUtc3BhY2U6IG5vd3JhcDsiPjxkaXYgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6IzJiMmIyYjtjb2xvcjojYTliN2M2Ij48cHJlIHN0eWxlPSJmb250LWZhbWlseTonSmV0QnJhaW5zIE1vbm8nLG1vbm9zcGFjZTtmb250LXNpemU6OS44cHQ7Ij48c3BhbiBzdHlsZT0iY29sb3I6I2IwOWQ3OTsiPlNjcE1lc3NhZ2XvvJo8L3NwYW4+UmVzcDwvcHJlPjxwcmUgc3R5bGU9ImZvbnQtZmFtaWx5OidKZXRCcmFpbnMgTW9ubycsbW9ub3NwYWNlO2ZvbnQtc2l6ZTo5LjhwdDsiPjxwcmUgc3R5bGU9ImZvbnQtZmFtaWx5OiAmcXVvdDtKZXRCcmFpbnMgTW9ubyZxdW90OywgbW9ub3NwYWNlOyBmb250LXNpemU6IDkuOHB0OyI+UGF5bG9hZFR5cGVMb2dpblRvUmVsYXkgPHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogOS44cHQ7IHdoaXRlLXNwYWNlLWNvbGxhcHNlOiBjb2xsYXBzZTsiPj3CoDwvc3Bhbj48c3BhbiBzdHlsZT0iZm9udC1zaXplOiA5LjhwdDsgd2hpdGUtc3BhY2UtY29sbGFwc2U6IGNvbGxhcHNlOyBjb2xvcjogcmdiKDEwNCwgMTUxLCAxODcpOyI+MTAwPC9zcGFuPjwvcHJlPjwvcHJlPjxwcmUgc3R5bGU9ImZvbnQtZmFtaWx5OidKZXRCcmFpbnMgTW9ubycsbW9ub3NwYWNlO2ZvbnQtc2l6ZTo5LjhwdDsiPjxwcmUgc3R5bGU9ImZvbnQtZmFtaWx5OidKZXRCcmFpbnMgTW9ubycsbW9ub3NwYWNlO2ZvbnQtc2l6ZTo5LjhwdDsiPnBheWxvYWQ6PHNwYW4gc3R5bGU9ImNvbG9yOiM2ZmFmYmQ7Ij5Mb2dpblJlc3BvbnNle308L3NwYW4+PC9wcmU+PC9wcmU+PC9kaXY+PC9kaXY+PC9kaXY+PC9kaXY+PC9mb3JlaWduT2JqZWN0Pjx0ZXh0IHg9IjQyMSIgeT0iMTQzIiBmaWxsPSJyZ2IoMCwgMCwgMCkiIGZvbnQtZmFtaWx5PSImcXVvdDtIZWx2ZXRpY2EmcXVvdDsiIGZvbnQtc2l6ZT0iMTFweCIgdGV4dC1hbmNob3I9Im1pZGRsZSI+U2NwTWVzc2FnZe+8mlJlc3AuLi48L3RleHQ+PC9zd2l0Y2g+PC9nPjwvZz48L2c+PGcgZGF0YS1jZWxsLWlkPSI2Ij48Zz48ZWxsaXBzZSBjeD0iMjYxIiBjeT0iNDAiIHJ4PSI2MCIgcnk9IjQwIiBmaWxsPSJyZ2IoMjU1LCAyNTUsIDI1NSkiIHN0cm9rZT0icmdiKDAsIDAsIDApIiBwb2ludGVyLWV2ZW50cz0iYWxsIi8+PC9nPjxnPjxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKC0wLjUgLTAuNSkiPjxzd2l0Y2g+PGZvcmVpZ25PYmplY3QgcG9pbnRlci1ldmVudHM9Im5vbmUiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIHJlcXVpcmVkRmVhdHVyZXM9Imh0dHA6Ly93d3cudzMub3JnL1RSL1NWRzExL2ZlYXR1cmUjRXh0ZW5zaWJpbGl0eSIgc3R5bGU9Im92ZXJmbG93OiB2aXNpYmxlOyB0ZXh0LWFsaWduOiBsZWZ0OyI+PGRpdiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIgc3R5bGU9ImRpc3BsYXk6IGZsZXg7IGFsaWduLWl0ZW1zOiB1bnNhZmUgY2VudGVyOyBqdXN0aWZ5LWNvbnRlbnQ6IHVuc2FmZSBjZW50ZXI7IHdpZHRoOiAxMThweDsgaGVpZ2h0OiAxcHg7IHBhZGRpbmctdG9wOiA0MHB4OyBtYXJnaW4tbGVmdDogMjAycHg7Ij48ZGl2IGRhdGEtZHJhd2lvLWNvbG9ycz0iY29sb3I6IHJnYigwLCAwLCAwKTsgIiBzdHlsZT0iYm94LXNpemluZzogYm9yZGVyLWJveDsgZm9udC1zaXplOiAwcHg7IHRleHQtYWxpZ246IGNlbnRlcjsiPjxkaXYgc3R5bGU9ImRpc3BsYXk6IGlubGluZS1ibG9jazsgZm9udC1zaXplOiAxMnB4OyBmb250LWZhbWlseTogSGVsdmV0aWNhOyBjb2xvcjogcmdiKDAsIDAsIDApOyBsaW5lLWhlaWdodDogMS4yOyBwb2ludGVyLWV2ZW50czogYWxsOyB3aGl0ZS1zcGFjZTogbm9ybWFsOyBvdmVyZmxvdy13cmFwOiBub3JtYWw7Ij7kuK3nu6fmnI3liqHlmajjgJBSMeOAkTwvZGl2PjwvZGl2PjwvZGl2PjwvZm9yZWlnbk9iamVjdD48dGV4dCB4PSIyNjEiIHk9IjQ0IiBmaWxsPSJyZ2IoMCwgMCwgMCkiIGZvbnQtZmFtaWx5PSImcXVvdDtIZWx2ZXRpY2EmcXVvdDsiIGZvbnQtc2l6ZT0iMTJweCIgdGV4dC1hbmNob3I9Im1pZGRsZSI+5Lit57un5pyN5Yqh5Zmo44CQUjHjgJE8L3RleHQ+PC9zd2l0Y2g+PC9nPjwvZz48L2c+PC9nPjwvZz48L2c+PHN3aXRjaD48ZyByZXF1aXJlZEZlYXR1cmVzPSJodHRwOi8vd3d3LnczLm9yZy9UUi9TVkcxMS9mZWF0dXJlI0V4dGVuc2liaWxpdHkiLz48YSB0cmFuc2Zvcm09InRyYW5zbGF0ZSgwLC01KSIgeGxpbms6aHJlZj0iaHR0cHM6Ly93d3cuZHJhd2lvLmNvbS9kb2MvZmFxL3N2Zy1leHBvcnQtdGV4dC1wcm9ibGVtcyIgdGFyZ2V0PSJfYmxhbmsiPjx0ZXh0IHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTBweCIgeD0iNTAlIiB5PSIxMDAlIj5UZXh0IGlzIG5vdCBTVkcgLSBjYW5ub3QgZGlzcGxheTwvdGV4dD48L2E+PC9zd2l0Y2g+PC9zdmc+从这里开始,无论是中继通信还是直接通信还是P2P等通信,所有的数据包格式都是《ScpMessage》
- 调用方法
使用ScpMessage协议,PayloadType为100
- 参数说明
| 名称 | 类型 | 是否必需 | 示例 | 描述 |
|---|---|---|---|---|
| payload | null | Y | null | 请求结构体为空 |
说明:
- ScpMessage的FromPeerId是自己的peerID
- ScpMessage的ToPeerId是中继节点的peerID
- 返回说明
| 名称 | 类型 | 描述 |
|---|---|---|
| ResponseType | uint8 | 登录响应类型,2字节无符号,常量:110-OK, 120-REJECT |
| RejectType | uint8 | 拒绝类型,1字节,常量暂未定义 |
| nextPingTime | uint16 | 下次ping时间秒数,2字节无符号 |
| ClientAddr | string | 客户端地址 |
- 返回示例
响应结构体:
go
type LoginResponse struct {
//登录响应类型 2字节无符号 常量:110-OK, 120-REJECT
ResponseType uint8
// 拒绝类型 常量暂未定义 1字节
RejectType uint8
// 下次ping时间秒数 2字节无符号
nextPingTime uint16
// 客户端地址
ClientAddr string
}响应结构体序列化和反序列化方式:
go
// 序列化
m.WriteUint8(response.ResponseType)
m.WriteUint8(response.RejectType)
m.WriteUint16(response.nextPingTime)
m.WriteString(response.ClientAddr, 0)
// 反序列化
ResponseType: m.ParseByte(0),
RejectType: m.ParseByte(1),
NextPingTime: m.ParseUint16(2),
ClientAddr: m.ParseString(4, 0),注意:中继上线和ping,ScpMessage的FromPeerId是自己的peerID,ToPeerId是中继节点的peerID
保活PING
按照登录响应中的nextPingTime间隔后向中继服务器发送ping
- 调用方法
使用ScpMessage协议,PayloadType为110
- 参数说明
| 名称 | 类型 | 是否必需 | 示例 | 描述 |
|---|---|---|---|---|
| payload | null | Y | null | 请求结构体为空 |
- 返回说明
| 名称 | 类型 | 描述 |
|---|---|---|
| StatusCode | uint8 | 状态码,1字节无符号,0-OK,1-需要重新上线 |
| NextPingTime | uint16 | 下次ping时间秒数,2字节无符号 |
| ClientAddr | string | 客户端地址 |
- 返回示例
响应结构体:
go
type HeartbeatResponse struct {
// 状态码 1字节无符号
// 0-OK, 1-需要重新上线
StatusCode uint8
// 下次ping时间秒数 2字节无符号
NextPingTime uint16
// 客户端地址
ClientAddr string
}响应结构体序列化和反序列化方式:
go
// 序列化
m.WriteUint8(response.StatusCode)
m.WriteUint16(response.NextPingTime)
m.WriteString(response.ClientAddr, 0)
// 反序列化
StatusCode: m.ParseByte(0),
NextPingTime: m.ParseUint16(1),
ClientAddr: m.ParseString(3, 0),心跳响应状态:
go
// HeartbeatResponseStatusOK OK
HeartbeatResponseStatusOK uint8 = 0
// HeartbeatResponseStatusReLogin 需要重新上线
HeartbeatResponseStatusReLogin uint8 = 1重要说明:
- 下次ping时间应该遵循HeartbeatResponse的nextPingTime,而不是登陆时的。
- 如果遇到HeartbeatResponseStatus不为OK:
- 对于网关设备:重启程序
- 对于APP:从第一步查询中继服务器重新开始流程
- 因为路由器上的端口会回收,外网地址也会周期变化(一般是24小时)如果ClientAddr地址发生变化,在打洞时需要使用心跳得到的最新外部地址(ClientAddr),否则P2P不会成功
通过中继向其他终端发送消息
除了登录和心跳包,中继收到的其他PayloadType都会试图将其转发,转发成功或失败不会有任何响应,应该由对端响应,发送方应该按照直连方式进行超时处理。
- 调用方法
使用ScpMessage协议,PayloadType为业务消息类型
- 参数说明
| 名称 | 类型 | 是否必需 | 示例 | 描述 |
|---|---|---|---|---|
| payload | 业务消息 | Y | 见业务协议 | 业务消息内容 |
说明:
- ScpMessage的FromPeerId是自己的peerID
- ScpMessage的ToPeerId是目标终端的peerID
- 返回说明
中继转发消息不会返回响应,应该由对端响应,发送方应该按照直连方式进行超时处理。
通过中继接收来自其他终端的消息
除了登录和心跳包,中继发来的任何消息都是转发来的消息,按业务包逻辑处理即可。
- 调用方法
接收来自中继的ScpMessage消息
- 参数说明
| 名称 | 类型 | 是否必需 | 示例 | 描述 |
|---|---|---|---|---|
| ScpMessage | object | Y | 见ScpMessage协议 | 来自中继的消息 |
说明:
- 除了登录和心跳包(PayloadType 100和110),中继发来的任何消息都是转发来的消息
- 按业务包逻辑处理即可
