我使用QML的WebSockets組件創建了一個簡單的聊天應用程序。這只是客戶端:QML WebSocket錯誤:不支持的WebSocket方案:http
Window {
id: root
visible: true
width: 1024
height: 768
property variant messages: []
WebSocket {
id: sock
url: "http://localhost:3700"
onTextMessageReceived: {
var data = message;
var messages = root.messages;
if(data.message) {
messages.push(data);
var html = '';
for(var i = 0; i < messages.length; i++) {
html += '<b>' + (messages[i].username ? messages[i].username : 'Server') + ': </b>';
html += messages[i].message + '<br />';
}
messageBox.append(html);
} else {
messageBox.append("There is a problem:", data);
}
}
onStatusChanged: {
if (sock.status == WebSocket.Error) {
messageBox.append("Error: " + sock.errorString);
}
else if (sock.status == WebSocket.Open) {
messageBox.append("Socket open");
}
else if (sock.status == WebSocket.Closed) {
messageBox.append("Socket closed");
}
}
active: false
}
服務器上的Node.js和Socket.io使用this文章來實現。 問題是,當我嘗試連接到該應用程序將引發此服務器:
Error: Unsupported WebSocket scheme: http
如果我改變協議WS,則服務器關閉連接。我能做什麼?
服務器代碼:
var express = require("express");
var app = express();
var port = 3700;
app.set('views', __dirname + '/tpl');
app.set('view engine', "jade");
app.engine('jade', require('jade').__express);
app.get("/", function(req, res){
res.render("page");
});
app.use(express.static(__dirname + '/public'));
var io = require('socket.io').listen(app.listen(port));
io.sockets.on('connection', function (socket) {
socket.emit('message', { message: 'welcome to the chat' });
socket.on('send', function (data) {
io.sockets.emit('message', data);
});
});
console.log("Listening on port " + port);
Socket.io!== websockets。 Socket.io首先使用xhr進行連接,然後在支持的情況下升級到websockets。 – 2014-11-06 11:02:46
Socket.io在服務器上,那裏沒有xhr。你的意思是我需要創建一個沒有Socket.io的服務器? – jstice4all 2014-11-06 11:05:17
與socket.io的初始連接需要xhr ...'''''Socket.IO永遠不會假定WebSocket將會工作,因爲在實踐中,它很可能不會。相反,它立即建立與XHR或JSONP的連接,然後嘗試將連接升級到WebSocket.'。 – 2014-11-06 11:06:27