4.7.3 • Published 1 month ago

@diyaner/egg-ws v4.7.3

Weekly downloads
-
License
MIT
Repository
github
Last release
1 month ago

egg-ws

v4.0 非兼容性更新

  1. worker 的 onMessage 对象的属性 data 变更为 msg。data 变为接收 msg.data 的值
  2. worker 业务逻辑入口监听事件的回调函数第一个为 onMessage 实例不变,第二个参数由 msg 变更为 msg.data
  3. 封装客户端。
  4. unit test 完善。
  5. 重构提取一层 common 逻辑,封装 onMessage 等作为 adapter。在 worker 和 agent 的接口实现处扩各自的 adapter 实现接口即可。

Install

$ npm i diyaner/egg-ws --save

Usage

// {app_root}/config/plugin.js
exports.ws = {
  enable: true,
  package: "@diyaner/egg-ws",
};

Configuration

// {app_root}/config/config.default.js
exports.ws = {
  // 传入ws模块的配置参数。可参考ws模块文档。
  wsOptions: {
    port: 7002,
  },
  // egg-ws插件加载时是否立即实例化web socket,默认true。若配置为false,则在应用中应该在didReady钩子中手动执行ws.init()方法进行初始化。
  immediate: true,
};

see config/config.default.js for more detail.

Example

在 app worker 使用

// app.js中执行init。然后写业务逻辑。
const wss = this.app.ws.init();
// app.js 中进行ws的业务逻辑事件监听
wss.on("event", (ws, data) => {
  //回调内可调用send向客户端回复消息
  ws.send();
});

// 在controller、service等业务逻辑处
// 推送消息(发送)
this.app.ws.emit("event", wsuid, data);
// 推送给全部客户端
this.app.ws.emit("event-name", "*", data);
// 推送给某些客户端
this.app.ws.emit("event-name", [wsuid1, wsuid2], data);

// 监听前端消息(接收)
this.app.ws.on("event", (ws, data) => {});
// 内置事件。新client连接事件。内置的事件,自定义事件时不能用这个名字。否则会发生错乱。
this.app.ws.on("ws-connection", (ws, data) => {});

详细实例可查看app.ts

在 agent 进程使用

插件已内置启动了 server。并把 server 实例挂载在 agent 的静态属性上。应用层的 agent 中直接使用 agent.wss

if (agent.wss) {
  // 接收前端消息事件。
  agent.wss.work.on("abc", (data: IPCData) => {
    console.log(process.pid);
    console.log(data);
    data.data = { is: "agent" };
    // 发送消息给前端。
    agent.wss?.work.emit("ws-response", data);
  });
}

详细实例可查看agent.ts

此处的发送消息事件详细可查阅./lib/agent/workerInterface.ts中的监听事件。且 data 必须符合 IPCData 接口定义。

// IPCData 定义在ws.d.ts中:
interface IPCData {
  wsuids: string[];
  wsuid: string;
  event: string;
  randId?: string;
  data: any;
}

注意:agent 模式和 worker 模式是提供的两种业务逻辑接口,不能同时监听同一个业务事件和处理返回,否则会多次执行逻辑。另外,由于 agent 进程必须保持稳定性,且与 worker 普通业务逻辑分隔,无法与普通业务交互,所以通常的应用场景是 agent 上处理简单的,不依赖普通 http 业务的 ws 业务。如一些很简单的 ws 在线 user list 信息推送等。而比较重的业务交互逻辑还是发送给 worker 处理。这其中又由于 agent 和 worker 进程通讯会消耗资源,因此各有优劣,处理业务时应该因地制宜合适地应用 agent 和 worker 两种方式。

Questions & Suggestions

Please open an issue here.

License

MIT

4.7.3

1 month ago

4.7.2

3 months ago

4.7.1

3 months ago

4.7.0

8 months ago

4.6.2

1 year ago

4.5.0

1 year ago

4.6.1

1 year ago

4.6.0

1 year ago

4.5.1

1 year ago

4.4.1

2 years ago

4.4.0

2 years ago

4.3.2

2 years ago

4.3.1

2 years ago

4.3.4

2 years ago

4.3.3

2 years ago

4.1.0

2 years ago

4.0.0

2 years ago

4.3.0

2 years ago

4.2.1

2 years ago

4.2.0

2 years ago

4.1.1

2 years ago

3.1.3

2 years ago

3.1.2

2 years ago

3.1.1

2 years ago

3.1.0

3 years ago

3.0.1

3 years ago

3.0.0

3 years ago

2.0.0

3 years ago

1.2.0

3 years ago

1.1.1

3 years ago

1.1.0

3 years ago

1.0.0

3 years ago