gpt4 book ai didi

node.js - 如何在 node.js 和 socket.io 应用程序中组织套接字处理

转载 作者:IT老高 更新时间:2023-10-28 23:18:58 25 4
gpt4 key购买 nike

对于我的 REST api,我为每个路由创建了一个文件。

app.get('/api/user', routes.user.index);
app.get('/api/user/login', routes.user.login);

等等等等

现在我将 socket.io 引入后端,看来我只能为所有套接字事件调用一个函数。

var socket = require('./socket/stuff.js');

io.sockets.on('connection', function(sock){
socket.stuff(sock, io);
});

我应该如何分解 ./socket/stuff.js 文件(导出 stuff)。放入单独的文件中。我想最终用套接字替换我的 REST api,但我不希望所有内容都在一个文件中。

我想我会:

./socket/chat.js
./socket/user.js

等等。等等

最佳答案

要将您的事件处理程序组织在不同的文件中,您可以使用如下结构:

./main.js

var io = require('socket.io');
var Chat = require('./EventHandlers/Chat');
var User = require('./EventHandlers/User');

var app = {
allSockets: []
};

io.sockets.on('connection', function (socket) {

// Create event handlers for this socket
var eventHandlers = {
chat: new Chat(app, socket),
user: new User(app, socket)
};

// Bind events to handlers
for (var category in eventHandlers) {
var handler = eventHandlers[category].handler;
for (var event in handler) {
socket.on(event, handler[event]);
}
}

// Keep track of the socket
app.allSockets.push(socket);
});

./EventHandlers/Chat.js

var Chat = function (app, socket) {
this.app = app;
this.socket = socket;

// Expose handler methods for events
this.handler = {
message: message.bind(this) // use the bind function to access this.app
ping: ping.bind(this) // and this.socket in events
};
}

// Events

function message(text) {
// Broadcast message to all sockets
this.app.allSockets.emit('message', text);
});

function ping() {
// Reply to sender
this.socket.emit('message', 'PONG!');
});

module.exports = Chat;

关于node.js - 如何在 node.js 和 socket.io 应用程序中组织套接字处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20466129/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com