@@ -55,9 +55,89 @@ while(!www.isDone) {}
55
55
56
56
## TCP 网络通信
57
57
58
- 如果游戏使用 TCP 进行网络通信,在 Unity WebGL 中开发者需要使用 Websocket 进行替代。
58
+ 如果游戏使用 TCP 进行网络通信,在 Unity WebGL 中开发者可以使用微信基础库中的TCPSocket( ** 需要微信基础库3.1.1 ** ),也可以使用 Websocket 进行替代。
59
59
60
- ### 客户端
60
+ ### TCPSocket
61
+
62
+ 注意:出于应用场景考虑,TCPSocket.OnMessage表现与文档不一致。
63
+
64
+ ``` c#
65
+ /// <summary >
66
+ /// [TCPSocket.onMessage(function listener)](https://developers.weixin.qq.com/minigame/dev/api/network/tcp/TCPSocket.onMessage.html)
67
+ /// 监听当接收到数据的时触发该事件
68
+ /// needInfo: 是否需要返回localInfo和remoteInfo,设置为 false 时这两个字段会返回null,设置为 true 会降低性能,请按需使用
69
+ /// 多次使用OnMessage时needInfo以第一个OnMessage为准,OffMessage()移除所有回调后再次OnMessage可重新设置needInfo
70
+ /// </summary >
71
+ public void OnMessage (Action < TCPSocketOnMessageListenerResult > listener , bool needInfo = false )
72
+ ```
73
+
74
+ 使用举例:
75
+
76
+ ``` c#
77
+ using System .Text ;
78
+ using UnityEngine ;
79
+ using WeChatWASM ;
80
+ using LitJson ;
81
+
82
+ public class TCPTest : MonoBehaviour
83
+ {
84
+ void Start ()
85
+ {
86
+ // 初始化WXSDK
87
+ WX .InitSDK ((int code ) =>
88
+ {
89
+ Debug .Log (" InitSDK code: " + code );
90
+ TestTCPSocket ();
91
+ });
92
+ }
93
+
94
+ void TestTCPSocket ()
95
+ {
96
+ Debug .Log (" TestTCPSocket" );
97
+ // 创建TCPSocket
98
+ WXTCPSocket tcp = WX .CreateTCPSocket ();
99
+
100
+ // 注册回调
101
+ tcp .OnConnect (res =>
102
+ {
103
+ Debug .Log (" tcp 连接成功" );
104
+ // 连接成功时发送数据
105
+ tcp .Write (" TCP Write Test" );
106
+ });
107
+ tcp .OnError (res =>
108
+ {
109
+ Debug .Log (" tcp 连接失败" + JsonMapper .ToJson (res ));
110
+ WX .ShowModal (new ShowModalOption ()
111
+ {
112
+ content = res .errMsg
113
+ });
114
+ });
115
+ // 注意OnMessage参数与文档不同
116
+ tcp .OnMessage (res =>
117
+ {
118
+ Debug .Log (" tcp 消息" + JsonMapper .ToJson (res ));
119
+ WX .ShowModal (new ShowModalOption ()
120
+ {
121
+ content = Encoding .UTF8 .GetString (res .message )
122
+ });
123
+ }, true );
124
+
125
+ // 在给定的套接字上启动连接,请按需更改地址与端口
126
+ tcp .Connect (new TCPSocketConnectOption ()
127
+ {
128
+ address = " www.example.com" ,
129
+ port = 8848
130
+ });
131
+ }
132
+ }
133
+
134
+ ```
135
+
136
+
137
+
138
+ ### WebSocket
139
+
140
+ #### 客户端
61
141
62
142
支持 Unity Websocket 的第三方插件比较多,可以从 Github 或 AssetStore 找到。这里以[ UnityWebSocket] ( https://github.com/psygames/UnityWebSocket ) 为例。
63
143
@@ -89,14 +169,81 @@ UnityWebSocket需要对WebSocket.jslib做两处修改([新版本](https://github
89
169
90
170
可参考[ WebSocket Demo] ( https://github.com/wechat-miniprogram/minigame-unity-webgl-transform/tree/main/Demo/UnityWebSocket_WebGL )
91
171
92
- ### 服务端
172
+ #### 服务端
93
173
94
174
如果服务端使用 TCP 接入,则需要使用 WSS<-->TCP 的代理层。解决方案也很多:
95
175
- 使用 Ngnix、 [ websockify-js] ( https://github.com/novnc/websockify-js ) /[ websockify] ( https://github.com/novnc/websockify ) 做反向代理(推荐)
96
176
- 改造原有TCP服务兼容wss服务
97
177
98
178
*** 特别地,在处理WebSocket数据包时,请注意数据的“粘包”问题,需要游戏服务器自行处理。***
99
179
180
+ ## UDP 网络通信
181
+
182
+ 微信基础库支持UDPSocket类。
183
+
184
+ 注意:出于应用场景考虑,TCPSocket.OnMessage表现与文档不一致。
185
+
186
+ ``` c#
187
+ /// <summary >
188
+ /// [UDPSocket.onMessage(function listener)](https://developers.weixin.qq.com/minigame/dev/api/network/udp/UDPSocket.onMessage.html)
189
+ /// 监听收到消息的事件
190
+ /// needInfo: 是否需要返回localInfo和remoteInfo,设置为 false 时这两个字段会返回null,设置为 true 会降低性能,请按需使用
191
+ /// 多次使用OnMessage时needInfo以第一个OnMessage为准,OffMessage()移除所有回调后再次OnMessage可重新设置needInfo
192
+ /// </summary >
193
+ public void OnMessage (Action < UDPSocketOnMessageListenerResult > listener , bool needInfo = false )
194
+ ```
195
+
196
+ 使用举例:
197
+
198
+ ``` c#
199
+ using System .Text ;
200
+ using UnityEngine ;
201
+ using WeChatWASM ;
202
+ using LitJson ;
203
+
204
+ public class UDPTest : MonoBehaviour
205
+ {
206
+ // Start is called before the first frame update
207
+ void Start ()
208
+ {
209
+ Debug .Log (" Start" );
210
+ WX .InitSDK ((int code ) =>
211
+ {
212
+ Debug .Log (" InitSDK code: " + code );
213
+ TestUDPSocket ();
214
+ });
215
+ }
216
+
217
+ void TestUDPSocket ()
218
+ {
219
+ Debug .Log (" TestUDPSocket" );
220
+ // 创建UDPSocket
221
+ var udp = WX .CreateUDPSocket ();
222
+ // 注册回调
223
+ udp .OnMessage (res =>
224
+ {
225
+ Debug .Log (" udp 消息" + JsonMapper .ToJson (res ));
226
+ WX .ShowModal (new ShowModalOption ()
227
+ {
228
+ content = Encoding .UTF8 .GetString (res .message )
229
+ });
230
+ });
231
+ // 绑定端口
232
+ udp .Bind ();
233
+ // 向指定的 IP 和 port 发送消息,请按需更改地址和端口
234
+ udp .Send (new UDPSocketSendOption ()
235
+ {
236
+ address = " www.example.com" ,
237
+ port = 8848 ,
238
+ message = " UDP Send Test"
239
+ });
240
+ }
241
+ }
242
+
243
+ ```
244
+
245
+
246
+
100
247
101
248
## 注意事项
102
249
微信小游戏的网络需要提前在MP后台[ 配置安全域名] ( https://developers.weixin.qq.com/minigame/dev/guide/base-ability/network.html ) ,以及使用带证书的HTTPS、WSS协议。
0 commit comments