我用express来生成我的网站(即表达mysite);我在我的网站中添加了socket.io支持。但是当我的socket.io客户端尝试连接服务器时,我发现服务器一直在接收'连接'事件(.on('connection',function(socket)...)并且客户端没有收到任何消息......
在我的/ bin / www
中var app = require('../app');
var debug = require('debug')('mysite:server');
var http = require('http');
var https= require('https');
var fs = require('fs');
//Get port from environment and store in Express.
var port = normalizePort(process.env.PORT || '3000');
app.set('port', port);
app.set('httpsport', 443);
//Create HTTP server.
var options = {
key: fs.readFileSync('.\file.pem'),
cert: fs.readFileSync('.\file.crt')
};
var server = http.createServer(app);
var httpsServer = https.createServer(options, app).listen(app.get('httpsport'));
//Listen on provided port, on all network interfaces.
server.listen(port);
server.on('error', onError);
server.on('listening', onListening);
//Normalize a port into a number, string, or false.
function normalizePort(val) {
var port = parseInt(val, 10);
if (isNaN(port)) {
// named pipe
return val;
}
if (port >= 0) {
// port number
return port;
}
return false;
}
//Event listener for HTTP server "error" event.
function onError(error) {
..........
}
//Event listener for HTTP server "listening" event.
function onListening() {
var addr = server.address();
var bind = typeof addr === 'string'
? 'pipe ' + addr
: 'port ' + addr.port;
debug('Listening on ' + bind);
}
//socket.io
var io = require('socket.io')(httpsServer);
io.on('connection', function(socket) {
//keep printing 'new connection' string in console
console.log('new connection');
//client doesn't receive this message
socket.emit('message', {'message': 'hello world'});
});
我的客户:
<html>
<head>
<script src="https://cdn.socket.io/socket.io-1.0.0.js"></script>
<script src="https://code.jquery.com/jquery-3.2.1.min.js"
integrity="sha256-hwg4gsxgFZhOsEEamdOYGBf13FyQuiTwlAQgxVSNgt4="
crossorigin="anonymous"></script>
</head>
<body>
<script>
var URL_SERVER = 'https://localhost:443';
var socket = io.connect(URL_SERVER);
socket.on('message', function(data) {
$('#message').text(data.message);
});
</script>
<div id="message">Message</div>
</body>
</html>
任何建议?
答案 0 :(得分:1)
您在客户端中引用了一个非常旧版本的socket.io(1.0.0)。您没有指定在服务器上使用的socket.io版本,但理想情况下客户端和服务器应该匹配。
socket.io将在您服务器的SELECT DISTINCT
路径上提供其匹配的客户端脚本,或者您可以使用CDN中的较新版本。
https://cdnjs.cloudflare.com/ajax/libs/socket.io/1.7.4/socket.io.js https://cdnjs.cloudflare.com/ajax/libs/socket.io/2.0.4/socket.io.js
您的代码按照预期运行,包含1.x分支的最新版本(1.7.4)和2.x分支的最新版本(2.0.4)