我如何分离插座.IO路由代码到不同的文件
How do I seperate Socket.io route code into different files
假设您有一个这样的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文件。然而,我不确定它们是如何工作的,我似乎根本找不到任何这样的例子。
我的想法是为以下任务提供一个处理程序:
- 上传/下载文件
有谁能告诉我正确的方向吗,或者有人有什么文档吗?
您应该创建一个名为"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);
相关文章:
- 从桌面读取python文件时高亮显示代码
- Emberjs应用程序加载在除Index之外的所有路由上
- 正在使用$location.path(.)路由ng视图
- 如何将函数包装在函数中以避免代码重复
- 通过单击表单中的按钮,在代码生成中使用javascript生成字母数字代码
- 无法运行php代码,有角度路由问题
- 为什么获胜't此代码中的路由工作
- 节奏和余烬,我如何让它在所有路由中工作而不重复代码
- 如何将快速路由处理传递给下一个中间件并破坏当前代码块
- 使用$routeProvider进行动态路由和编译角度代码
- 如何使用javascript路由对同一页面的多个页面进行特定代码
- 发布到服务器端代码内的路由
- 如何将代码从一个路由文件分离到多个,以及如何从这些分离的文件中调用函数
- Url路由不工作在我的PHP代码
- 快速路由和异步代码-我如何发送异步代码的结果
- 代码点火器路由.AJAX使用javascript获取参数
- Laravel 4-重定向到javascript代码Blade模板内的路由
- 加载angularjs路由后运行javascript代码
- 使用Backbone.js路由器进行路由而不是使用服务器端代码的原因
- 我如何分离插座.IO路由代码到不同的文件