gpt4 book ai didi

javascript - 如何将 Socket.io 路由代码分离到不同的文件中

转载 作者:搜寻专家 更新时间:2023-11-01 00:42:19 24 4
gpt4 key购买 nike

假设你有一个像这样的 server.js:

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

var userDetails = {};


/*
Connection (after login)
*/
socket.on('userData', function (userDetails) {
users[userDetails.id] = socket;
userDetails = userDetails;
require('user-online.js').register(socket, userDetails);
});



//Notification
socket.on('sendNotification', function (users, notification) {
users.forEach(function (y) {
if(users[y] != null){
users[y].emit(notification);
}
})

});



socket.emit('newNotification', 'hell');

socket.emit('someEvent', 'hello world');

socket.on('browserClose', function (msg) {
console.log('this user has disconnect: ' + userDetails.username);
users[userDetails.id] = null;
});



//check connection / status of other sockets:

socket.on('isOnline', function(user_id){
socket.emit('userStatus', users[user_id] != null);
});

socket.on('setMyLocation', function(location){
users[userDetails.id].location = location;
});
});

我不会费心把上面所有的东西放在它连接的地方,因为它与我的问题无关。

我的问题基本上是,当添加更多代码时,此 server.js 文件会变得相当困惑。我想将套接字的任务拆分为不同的 javascript 文件。但是我不确定它们是如何工作的,而且我似乎在任何地方都找不到任何这样的例子。

我的想法是为以下任务设置一个处理程序:

  • 通知
  • 聊天
  • 上传/下载文件

谁能把我推向正确的方向,或者谁有一些文档?

最佳答案

您应该创建一个模块来管理来 self 命名为“client-management”的客户端的连接:

var ClientManagement = function() {
var self = this;
this.messageListeners = [];
/**
* Add a messsage listener(require a onClientMessage(data,socket) function in the listener)
* @param listener
*/
this.addMessageListener = function(listener) {
this.messageListeners.push(listener);
};
this.onMessage = function(data, socket) {
for (var i = 0; i < this.messageListeners.length; i++) {
try {
this.messageListeners[i].onClientMessage(data, socket);
} catch (exc) {

}
}
};
this.start=function(){
var io = require('socket.io')(8080);
io.sockets.on('connection', function(socket) {
/**
* Receive message from client
*/
socket.on('message', function(data) {
self.onMessage(data, socket);
});
});
});
}
module.exports = new ClientManagement();

使用这个模块:

var clientManagementModule = require('./modules/client-management.js');
clientManagementModule.start();
var notificationModule = require('./modules/notification.js');
var chatModule = require('./modules/chat.js');
clientManagementModule.addMessageListener(notificationModule);
clientManagementModule.addMessageListener(chatModule);

关于javascript - 如何将 Socket.io 路由代码分离到不同的文件中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30372972/

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