使用 WebSocket 服务器

开发者可以在游戏进程中启动一个 WebSocket 服务器,提供 RPC 接口。通过完善和调用这些 RPC 接口,开发者能够对游戏进程内部状态进行监控,增加对游戏进程状态的管理能力。

如何启用

WebSocket 服务器 默认是剔除的。若要启用,需要在编辑器顶部菜单栏中 项目设置 -> 功能裁剪 中勾选WebSocket Server 配置。

如何调用 WebSocket 服务器接口

可参考下方实例代码:

  1. // 在原生平台的 Release 模式下或者在 Web /微信小游戏等平台中,WebSocketServer 可能没有定义
  2. if (typeof WebSocketServer === "undefined") {
  3. console.error("WebSocketServer is not enabled!");
  4. return;
  5. }
  6. let s = new WebSocketServer();
  7. s.onconnection = function (conn) {
  8. conn.onmessage = function (data) {
  9. conn.send(data, (err) => {});
  10. }
  11. conn.onclose = function () {
  12. console.log("connection gone!");
  13. };
  14. };
  15. s.onclose = function () {
  16. console.log("server is closed!");
  17. }
  18. s.listen(8080, (err) => {
  19. if (!err);
  20. console.log("server booted!");
  21. });

API

接口定义如下:

  1. /**
  2. * 服务器对象
  3. */
  4. class WebSocketServer {
  5. /**
  6. * 关闭服务
  7. */
  8. close(cb?: WsCallback): void;
  9. /**
  10. * 监听并启动服务
  11. */
  12. listen(port: number, cb?: WsCallback): void;
  13. /**
  14. * 处理新的请求
  15. */
  16. set onconnection(cb: (client: WebSocketServerConnection) => void);
  17. /**
  18. * 设置服务器关闭回调
  19. */
  20. set onclose(cb: WsCallback);
  21. /**
  22. * 获取所有的连接对象
  23. */
  24. get connections(): WebSocketServerConnection[];
  25. }
  26. /**
  27. * 服务器中客户端的连接对象
  28. */
  29. class WebSocketServerConnection {
  30. /**
  31. * 关闭连接
  32. */
  33. close(code?: number, reason?: string): void;
  34. /**
  35. * 发送数据
  36. */
  37. send(data: string|ArrayBuffer, cb?: WsCallback): void;
  38. set ontext(cb: (data: string) => void);
  39. set onbinary(cb: (data: ArrayBuffer) => void);
  40. set onmessage(cb: (data: string|ArrayBuffer) => void);
  41. set onconnect(cb: () => void;);
  42. set onclose(cb: WsCallback);
  43. set onerror(cb: WsCallback);
  44. get readyState(): number;
  45. }
  46. interface WsCallback {
  47. (err?: string): void;
  48. }

注意: ondata 回调已经在 v3.7.0 版本废弃, 请使用 onmessage 代替.

参考链接

接口设计参考了 nodejs-websocket