即时通讯

cool-admin即时通讯功能基于Socket.io(v4)open in new window开发,midwayjs 官方 Socket.io 文档open in new window

配置

configuration.ts

import * as socketio from "@midwayjs/socketio";

@Configuration({
	imports: [
		// socketio http://www.midwayjs.org/docs/extensions/socketio
		socketio
	],
	importConfigs: [join(__dirname, "./config")]
})
export class ContainerLifeCycle {
	@App()
	app: koa.Application;

	async onReady() {}
}

服务端

import { WSController, OnWSConnection, Inject, OnWSMessage } from "@midwayjs/decorator";
import { Context } from "@midwayjs/socketio";
/**
 * 测试
 */
@WSController("/")
export class HelloController {
	@Inject()
	ctx: Context;

	// 客户端连接
	@OnWSConnection()
	async onConnectionMethod() {
		console.log("on client connect", this.ctx.id);
		console.log("参数", this.ctx.handshake.query);
		this.ctx.emit("data", "连接成功");
	}

	// 消息事件
	@OnWSMessage("myEvent")
	async gotMessage(data) {
		console.log("on data got", this.ctx.id, data);
	}
}

客户端

const io = require("socket.io-client");

const socket = io("http://127.0.0.1:8001?token=123");

socket.on("data", (msg) => {
	console.log("服务端消息", msg);
});

注意事项

如果部署为多线程的,为了让进程之间能够进行通讯,需要配置 redis 适配器,配置方式open in new window

// src/config/config.default
import { createRedisAdapter } from "@midwayjs/socketio";

export default {
	// ...
	socketIO: {
		adapter: createRedisAdapter({ host: "127.0.0.1", port: 6379 })
	}
};
Last Updated: