2013-09-04 46 views
6

Tôi đang chạy ứng dụng trò chuyện mẫu này https://github.com/btford/angular-socket-io-im sử dụng socket.io/angular/node để tạo ứng dụng khách im cơ bản.AngularJS: ứng dụng trò chuyện với socket.io qua https

Tuy nhiên, tôi gặp sự cố khi cố gắng làm cho nó hoạt động trên https.

Không có sự kiện ổ cắm nào bị bắt trên máy chủ, do đó không có tin nhắn trò chuyện nào được gửi cho khách hàng và người dùng không thể tham gia phòng. Tôi cũng nhận được lỗi này trên máy khách trong socket.io.js:

Uncaught TypeError: Cannot call method 'onClose' of null 

tôi đã tạo ra một máy chủ expresshttps lắng nghe trên cổng 8000 và sửa đổi định nghĩa socket để:

var socket = io.connect('https://localhost:8000',{secure: true, port:8000}); 

cả js/services.js và trong /bower_components/angular-socket-io/socket.js

Bạn không chắc chắn cách khắc phục điều này. Cảm ơn trước!

+0

Bạn có thể nhìn vào URL sau: http: // stackoverflow .com/questions/15295672/uncaught-typeerror-cannot-call-method-onclose-of-null –

+0

Thú vị, bạn đã nghĩ ra giải pháp nào chưa? –

+0

Tôi đang gặp vấn đề tương tự. – chovy

Trả lời

0

Tôi có một ứng dụng mà không cùng một điều này chính xác :) sử dụng ổ cắm io và sử dụng: 8080, bạn sẽ cần phải chắc chắn cert bảo mật của bạn được đăng ký mà cả https://localhosthttps://localhost:8000 và đã được thêm vào keychain của bạn nếu không thì trang sẽ tải nhưng kết nối socket của bạn sẽ thất bại.

0

Chỉ có một vài thay đổi đã được yêu cầu để làm cho nó có sẵn thông qua https, mặc dù điều này là một ứng dụng nhanh 2.5 cũ bạn nên xem xét nhìn vào: https://github.com/guille/chat-example.git

/** 
* Module dependencies. 
*/ 

var fs = require('fs'); 
var options = { 
    key:fs.readFileSync('key.pem'), 
    cert:fs.readFileSync('cert.pem') 
}; 
var express = require('express'), 
    routes = require('./routes'), 
    socket = require('./routes/socket.js'); 

var app = module.exports = express.createServer(options); 



// Hook Socket.io into Express 
var io = require('socket.io').listen(app); 

// Configuration 

app.configure(function(){ 
    app.set('views', __dirname + '/views'); 
    app.set('view engine', 'jade'); 
    app.set('view options', { 
    layout: false 
    }); 
    app.use(express.bodyParser()); 
    app.use(express.methodOverride()); 
    app.use(express.static(__dirname + '/public')); 
    app.use(app.router); 
}); 

app.configure('development', function(){ 
    app.use(express.errorHandler({ dumpExceptions: true, showStack: true })); 
}); 

app.configure('production', function(){ 
    app.use(express.errorHandler()); 
}); 

// Routes 

app.get('/', routes.index); 
app.get('/partials/:name', routes.partials); 

// redirect all others to the index (HTML5 history) 
app.get('*', routes.index); 

// Socket.io Communication 

io.sockets.on('connection', socket); 

// Start server 

app.listen(8080, function(){ 
    console.log("Express server listening on port %d in %s mode", app.address().port, app.settings.env); 
}); 
Các vấn đề liên quan