• 使用 WebSocket 服务器
    • 如何启用
      • 方式 1:全平台启用——修改默认值
      • 方式 2:特定平台启用
    • 如何调用 WebSocket 服务器接口
    • API
    • 参考链接

    使用 WebSocket 服务器

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

    如何启用

    WebSocket 服务器 默认是剔除的,需要设置宏 USE_WEBSOCKET_SERVER = 1 以启用。可以通过以下两种方式启用。

    方式 1:全平台启用——修改默认值

    ccConfig.h 中, 设置 USE_WEBSOCKET_SERVER 的值为 1

    edit-ccconfig

    注意:由于在 Release 模式下通常很少保留 WebSocket 服务器,修改中建议包含:

    1. #if USE_WEBSOCKET_SERVER && !COCOS2D_DEBUG
    2. #define USE_WEBSOCKET_SERVER 0
    3. #endif

    修改默认值会影响所有平台,如果不明确是否需要在所有平台启用,可以参考下面的方式 2,只针对特定平台开启。

    方式 2:特定平台启用

    在一些情况下,只有特定的平台需要开启 WebSocket 服务器。此时需要通过不同的方式来设置 USE_WEBSOCKET_SERVER

    • Visual Studio

    编辑项目属性,如下图所示:

    edit vs

    • Android

    编辑 proj.android-studio/app/jni/Application.mk,如下图所示:

    edit-application-mk

    • Xcode

    编辑项目属性,如下图所示:

    edit-xcode

    只有通过上面的配置,才能在 JS 代码中调用 WebSocketSever

    如何调用 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.ondata = 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(cb?: WsCallback): 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 ondata(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. }

    参考链接

    • 接口设计参考了 nodejs-websocket