2014-05-11 23 views
6

Tôi đã tìm nạp một bản sao của Mean.io mới nhất và ghi nhận một số thay đổi so với phiên bản trước đó mà tôi đã làm việc trước đây. Bây giờ, những gì tôi đang làm là tạo ra một ứng dụng trò chuyện rất cơ bản sử dụng socket.io với các phòng. Theo thiết lập cơ bản trong tài liệu về Socket, tôi phải thực hiện như sau:Làm thế nào để sử dụng socket.io với mean.io mới nhất?

var app = require('express')() 
    , server = require('http').createServer(app) 
    , io = require('socket.io').listen(server); 

server.listen(80); 

app.get('/', function (req, res) { 
    res.sendfile(__dirname + '/index.html'); 
}); 

io.sockets.on('connection', function (socket) { 
    socket.emit('news', { hello: 'world' }); 
    socket.on('my other event', function (data) { 
    console.log(data); 
    }); 
}); 

Tôi sẽ xác định thiết lập phòng ổ cắm cơ bản ở đâu?

socket.set("log level", 1); 
var people = {}; 
var rooms = {}; 
var clients = []; 

Trả lời

9

Bạn có thể đặt socket.io để nghe trên máy chủ của bạn trên

/server/config/system/bootstrap.js 

Yêu cầu module socket.io

var express = require('express'), 
    appPath = process.cwd(), 
    io  = require('socket.io'); 

Bây giờ thiết lập socket.io để lắng nghe trên của bạn app

// Express settings 
var app = express(); 
require(appPath + '/server/config/express')(app, passport, db); 
io = io(app.listen(3000));  

return io; 

Sau đó, bạn nee d để tiêm đối tượng socket.io vào ứng dụng của bạn trên hàm bootstrapDependencies().

function bootstrapDependencies() { 
    ... 

    // Register socket.io dependency 
    mean.register('io', function() { 
     return io; 
    }); 
} 

Mean.uses dự án này cho dependency injection nó https://www.npmjs.org/package/dependable

Cuối cùng, bạn cần phải cấu hình ứng dụng của bạn để nghe trên tất cả các kết nối socket lẽ bạn muốn làm những bộ định tuyến trên ứng dụng chính của bạn tại

/server/routes/index.js 

Trình xử lý kết nối mẫu

var io = require('meanio').io; 

io.on('connection', function (socket) { 
    // emit data to the clients 
    socket.emit('news', { hello: 'world' }); 

    // event listeners 
    socket.on('my other event', function (data) { 
     // call your controller function here 
     Controller.action(data); 
    }); 
}); 

Và quan trọng hơn, đừng quên thiết lập socket.io ở phía máy khách.

// on '/server/views/includes/foot.html' 
<script src='/socket.io/socket.io.js'></script> 
<script> 
    var socket = io(); 
</script> 
0

Cập nhật mới nhất v0.4.0 yêu cầu một chiến lược khác để thiết lập socket.io. Tôi hiện đang thảo luận với một trong những người đóng góp dự án để xác thực giải pháp của tôi. Tôi chắc chắn sẽ cập nhật câu trả lời của tôi khi tôi chắc chắn 100%.

Gói trung bình giờ là nơi đặt chức năng khởi động, nơi thiết lập nhanh được gọi.

+3

Có bản cập nhật nào cho điều này hay bạn vẫn đảm bảo rằng nó hoàn toàn hoạt động? Cảm ơn, bằng cách này! –

+0

Tôi cũng quan tâm để xem nếu có công việc xung quanh. –

+0

Tiến trình: http://www.reddit.com/r/node/comments/29pr64/how_to_combine_meanio_and_socketio/ ... –

0

Có vẻ như các nhân vật mean.io gần đây đã phát hành triển khai Socket.io chính thức tích hợp trực tiếp với ngăn xếp của họ. Kiểm tra nó ra on Github.

1

Tôi vừa trả lời một bài đăng SO khác (Mean.io framwork with socket.io).

Lưu ý: Tôi đang sử dụng mean.io v0.5.26 và socket.io v1.1.0.

Dán lại câu trả lời của tôi, tại đây.


Tôi cũng phải đối mặt với cùng một vấn đề và đã cho tôi khoảng một tuần để cuối cùng có được nó đúng.Tôi sẽ cố gắng để giải thích những gì tôi đã làm:

app.js

Trong tập tin này, tôi chỉ gọi mã tạo và thiết lập một đối tượng socket.io đối với tôi, sau đó được truyền cho mô-đun tuyến đường.

'use strict'; 

/* 
* Defining the Package 
*/ 
var Module = require('meanio').Module; 

var MeanSocket = new Module('chat'); 

/* 
* All MEAN packages require registration 
* Dependency injection is used to define required modules 
*/ 
MeanSocket.register(function(app, http) { 

    var io = require('./server/config/socketio')(http); 

    //We enable routing. By default the Package Object is passed to the routes 
    MeanSocket.routes(io); 

    return MeanSocket; 
}); 

máy chủ/config/socketio.js

Tập tin này chỉ đơn giản là cấu hình các đối tượng socket.io. Xin lưu ý rằng tôi đã phải nâng cấp mô-đun meanio lên phiên bản 0.5.26 cho tác phẩm này, vì đối tượng http (máy chủ tốc hành) không có sẵn trong các phiên bản cũ hơn. Hơn nữa, trong trường hợp bạn muốn sử dụng ssl, bạn có thể tiêm https thay vì http.

'use strict'; 

var config = require('meanio').loadConfig(), 
    cookie = require('cookie'), 
    cookieParser = require('cookie-parser'), 
    socketio = require('socket.io'); 

module.exports = function(http) { 

    var io = socketio.listen(http); 

    io.use(function(socket, next) { 
     var data = socket.request; 

     if (!data.headers.cookie) { 
      return next(new Error('No cookie transmitted.')); 
     } 

     var parsedCookie = cookie.parse(data.headers.cookie); 
     var sessionID = parsedCookie[config.sessionName]; 
     var parsedSessionID = cookieParser.signedCookie(parsedCookie[config.sessionName], config.sessionSecret); 

     if (sessionID === parsedSessionID) { 
      return next(new Error('Cookie is invalid.')); 
     } 

     next(); 
    }); 

    return io; 
}; 

tuyến/chat.js

Cuối cùng, sử dụng tệp tuyến để xác định các sự kiện ổ cắm vv

'use strict'; 

// The Package is passed automatically as first parameter 
module.exports = function(MeanSocket, io) { 

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

     console.log('Client Connected'); 

     socket.on('authenticate', function(data, callback) { 

     }); 
    }); 
}; 

Hope this helps!

+0

Chỉ muốn thêm rằng mã này cuối cùng đã được đưa vào triển khai ổ cắm trung bình chính thức. Vì vậy, hãy kiểm tra xem nó ra! Và nó cũng giải quyết vấn đề triển khai trung bình và ổ cắm trung bình phía sau một cổng duy nhất, vốn không được hỗ trợ trước đó. – Digitrance

+0

Không hoạt động ở chế độ sản xuất trong phiên bản mới nhất vì các cụm .. –

Các vấn đề liên quan