我用Express,SocketIO和Redis创建了我的Socket服务器
server.js
var app = require('express')();
var server = require('http').Server(app);
var io = require('socket.io')(server);
var redis = require('redis');
server.listen(8890, function (e) {
console.log(e);
});
io.on('connection', function (socket) {
console.log("new client connected");
var redisClient = redis.createClient();
redisClient.subscribe('message');
redisClient.on("message", function(channel, message) {
console.log("mew message in queue "+ message + "channel");
socket.emit(channel, message);
});
socket.on('disconnect', function() {
redisClient.quit();
});
socket.on('connect_error', function() {
redisClient.quit();
});
});
从命令行,我运行node server.js
。它奏效了。
我还创建了一个html文件来连接到该服务器。
在浏览器控制台中,我运行io.connect('http://localhost:8890')
。结果我得到了
正如我所见,连接(请求)太多。 怎么了?我的代码有什么问题?
答案 0 :(得分:2)
您的客户端和服务器版本不匹配导致初始连接失败,而较旧的客户端非常愚蠢,无法继续尝试。如果您在服务器上使用2.0.4,那么您也必须将该版本用于客户端。如果您使用以下命令直接从服务器提供客户端版本:
<script src="http://localhost:8890/socket.io/socket.io.js"></script>
然后,socket.io服务器将自动为您提供正确的客户端版本。
或者,您可以手动链接到CDN上的正确版本,例如https://cdnjs.cloudflare.com/ajax/libs/socket.io/2.0.4/socket.io.js
。但客户端和服务器版本必须匹配。
直接从您自己的服务器获取客户端的优点是,无论何时更新服务器版本的socket.io,客户端版本都将自动升级并保持完美同步,因为匹配的客户端版本内置于服务器版本。