以下是使用Express和ES模块初始化Socket.io的更好、更专业的2021年方法:
下面是在文件Socket.js中的导入和初始化代码:
import { Server } from 'socket.io';
class SocketServer {
constructor(server) {
const io = new Server(server);
this.socket = io.of('/session').on('connection', (socket) => {
const chatApiInstance = JSON.parse(
socket.handshake.query.chatApiInstance
);
if (chatApiInstance) {
socket.join(chatApiInstance);
}
});
}
onNewMessage(chatApiInstance, message) {
this.socket.to(chatApiInstance).emit('newMessage', JSON.stringify(message));
}
onStatusUpdate(chatApiInstance, status) {
this.socket.to(chatApiInstance).emit('statusChange', status);
}
}
export default SocketServer;
然后,在您的 Server.js 中,您应该像这样导入 Socket.js:
import app from './app';
import SocketServer from './socket';
const server = app.listen(process.env.PORT || 3333, '0.0.0.0');
const Socket = new SocketServer(server);
export default Socket;
那么你需要一个控制器来处理这个请求,就像这样:
import Socket from '../../server';
class SessionController {
async create(request, response) {
const { instanceId, messages, status } = request.body;
if (messages && messages.length) {
Socket.onNewMessage(instanceId, messages[0]);
} else if (status) {
Socket.onStatusUpdate(instanceId, status);
}
return response.send('OK');
}
}
export default new SessionController();
最后一步,不要忘记添加路由,如下所示:
import { Router } from 'express';
import SessionController from '../Controllers/SessionController';
const sessionRouter = Router();
sessionRouter.post('/', SessionController.create);
export default sessionRouter;
点击此处查看Socket.io v3的初始化详细信息:
https://socket.io/docs/v3/server-initialization/index.html