2011-07-09 61 views
7

Tôi đã có máy chủ node.js và chạy với Express và tôi đang cố thiết lập kết nối websocket bằng phía máy chủ socket.io và máy khách chrome 12 phía . Khi tôi cố gắng kết nối, socket.io xuất ra một thông báo gỡ lỗi nói rằng "phá hủy non-socket.io upgrade" và mã trong trình xử lý kết nối của tôi không chạy. Ngoài ra ở phía client, readyState của socket của tôi là 2 (CLOSING).vấn đề về websocket: không thể kết nối với máy chủ node.js

[sửa] readyState của ổ cắm thay đổi 0-2

+0

bạn có đang sử dụng socket.io.js trên máy khách để kết nối với máy chủ không? – pkyeck

+0

Bạn có thể đặt đoạn mã của mình ở đây (hoặc liên kết tới github) không? –

+0

Bạn đang sử dụng phiên bản nào của Node.js và socket.io? – apose

Trả lời

1

Hãy chắc chắn rằng bạn đang chèn socket.io.js nộp vào mã khách hàng của bạn và sử dụng nó. Nếu bạn cố gắng tạo websocket của riêng mình ở phía máy khách, có thể bạn sẽ gặp sự cố.

Đỗ một cái gì đó như thế này cho máy chủ của bạn:

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

app.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); 
    }); 
}); 

và một cái gì đó như thế này cho các tập tin HTML bạn đang phục vụ:

<script src="/socket.io/socket.io.js"></script> 
<script> 
    var socket = io.connect('http://localhost'); 
    socket.on('news', function (data) { 
    console.log(data); 
    socket.emit('my other event', { my: 'data' }); 
    }); 
</script> 

Hãy chắc chắn rằng bạn đang phục vụ /socket.io/socket.io.js từ dir webserver của bạn . Sau đó, tất cả những gì bạn phải làm là xem nhật ký bảng điều khiển của mình trong môi trường Nhà phát triển của trình duyệt web từ Tùy chọn hoặc với Firebug khi bạn truy cập trang.

+0

Khi tôi cố gắng thêm socket.io.js vào ứng dụng khách, tôi gặp lỗi mà máy khách không thể tìm thấy "yêu cầu". Tôi nhìn vào mã socket.io.js và nó sử dụng yêu cầu, mà tôi nghĩ là một điều phía máy chủ (tức là nút), không phải là một JavaScript trong trình duyệt được hỗ trợ. Có thư viện nào khác mà chúng ta cần đưa vào ứng dụng khách thực hiện "yêu cầu" phía máy khách không? hoặc tôi đang thiếu một cái gì đó? – Elisabeth

+0

@Elisabeth bạn nên làm điều đó thành một câu hỏi mới. Bạn sẽ không sử dụng require() trong máy khách. Trong ứng dụng khách, bạn sẽ sử dụng

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