Node.js Socket.io打开数百个连接
这是我的server.js代码:Node.js Socket.io打开数百个连接,node.js,express,socket.io,Node.js,Express,Socket.io,这是我的server.js代码: var express =require('express'), http = require('http'); var app= express(); var server = require('http').createServer(app); var io = require('socket.io').listen(server); users = []; connections = []; server.listen(process.env.Port
var express =require('express'),
http = require('http');
var app= express();
var server = require('http').createServer(app);
var io = require('socket.io').listen(server);
users = [];
connections = [];
server.listen(process.env.Port || 3000);
console.log('server running ...')
app.get('/', function(req, res) {
res.sendFile(__dirname + '/index.html');
});
io.sockets.on('connection', function(socket){
connections.push(socket);
console.log('Connected: %s sockets connected', connections.length);
socket.on('disconnect',function(data){
users.splice(users.indexOf(socket.username),1);
updateUsernames();
connections.splice(connections.indexOf(socket),1);
console.log('Disconnected: %s sockets conected', connections.length);
});
//send message
socket.on('send message', function(data){
console.log(data)
io.sockets.emit('new message',{msg: data, user: socket.username});
});
//new User
socket.on('new user', function(data,callback){
callback(true);
socket.username = data;
users.push(socket.username);
updateUsernames();
});
function updateUsernames(){
io.sockets.emit('get users', users)
}
});
这是我的html文件:
<!DOCTYPE html>
<html>
<head>
<title>IO chat</title>
<link rel = "stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css">
<script src="https://code.jquery.com/jquery-latest.min.js"></script>
<script src="/socket.io/socket.io.js"></script>
<style >
body{
margin-top: 30px;
}
#messageArea{
display: none;
}
</style>
</head>
<body>
<div class = "container">
<div id = "userFormArea" class= "row">
<div class = "col-md-12">
<form id = "userForm">
<div class = "form-group">
<label>Enter Username</label>
<input class = "form-control" id = "username">
<br/>
<input type="submit" class = "btn btn-primary" value = " Login"/>
</div>
</form>
</div>
</div>
<div class = "row" id = "messageArea">
<div class = "col-md-4">
<div class = "well">
<h3> Online users </h3>
<ul class = "list-group" id = "users"> </ul>
</div>
</div>
<div class = "col-md-8">
<div class="chat" id = "chat"> </div>
<form id = "messageForm">
<div class = "form-group">
<label>Enter Message</label>
<textarea class = "form-control" id = "message"> </textarea>
<br/>
<input type="submit" class = "btn btn-primary" value = "Send Message"/>
</div>
</form>
</div>
</div>
</div>
<script>
$(function(){
var socket = io.connect();
var $messageForm = $('#messageForm');
var $message = $('#message');
var $chat = $('#chat');
var $userFormArea = $('#userFormArea');
var $userForm = $('#userForm');
var $messageArea = $('#messageArea');
var $users = $('#users');
var $username = $('#username');
$messageForm.submit(function(e){
e.preventDefault();
socket.emit('send message', $message.val());
$message.val('');
});
socket.on('new message', function(data){
$chat.append('<div class = "well"><strong>'+data.user+'</strong>:' + data.msg + '<div>');
});
$userForm.submit(function(e){
e.preventDefault();
socket.emit('new user', $username.val(),function(data){
if(data){
$userFormArea.hide();
$messageArea.show();
}
});
$username.val('');
});
socket.on('get users', function(data){
var html = '';
for (i = 0; i< data.length; i++){
html +='<li class = "list-group-item" >' + data[i]+ '</li>';
}
$users.html(html);
});
});
</script>
</body>
</html>
IO聊天
身体{
边缘顶部:30px;
}
#消息区{
显示:无;
}
输入用户名
在线用户
输入消息
$(函数(){
var socket=io.connect();
var$messageForm=$(“#messageForm”);
var$message=$(“#message”);
var$chat=$(“#chat”);
var$userFormArea=$(“#userFormArea”);
var$userForm=$(“#userForm”);
var$messageArea=$(“#messageArea”);
var$users=$(“#users”);
var$username=$(“#username”);
$messageForm.submit(函数(e){
e、 预防默认值();
emit('send message',$message.val());
$message.val(“”);
});
socket.on('new message',函数(数据){
$chat.append(“”+data.user+”:“+data.msg+”);
});
$userForm.submit(函数(e){
e、 预防默认值();
emit('new user',$username.val(),函数(数据){
如果(数据){
$userFormArea.hide();
$messageArea.show();
}
});
$username.val(“”);
});
socket.on('get users',函数(数据){
var html='';
对于(i=0;i'+数据[i]+';
}
$users.html(html);
});
});
我已经为此奋斗了一段时间,socket.io有什么问题吗?还是我做错了什么
如果我有什么不同的事情要做,请告诉我。我直接连接到套接字,它会输出控制台日志
正如你在图中看到的,我希望它是连接的:一个人连接后连接1个插座 这通常发生在客户端和服务器使用不同版本的
socket.io
时。从package.json
检查服务器的版本,并为客户端提供相同的版本。我也遇到了同样的问题,升级到socket.io版本2.1.1
解决了这个问题。当客户端和服务器使用不同版本的socket.io
时,通常会出现这种情况。从package.json
检查服务器的版本,并为客户端提供相同的版本。我也遇到了同样的问题,升级到socket.io 2.1.1版后解决了这个问题。你真的用每缩进一个空格来写代码吗?性感,干净,是的。你是说第一个连接的插座显示的是connections.length
as 18324吗?仅供参考,io.sockets.on()
应该是io.on()
。是的,它实际上是对io.sockets.on('connection')进行垃圾邮件处理。我将其更改为io.on(),效果相同。当我使用确切的HTML页面运行确切的服务器代码时(加载了http://localhost:3000
,我在控制台中看到这一点:服务器正在运行…已连接:1套接字已连接
。我根本看不到您的问题。因此,正在发生的其他事情不仅是由您显示的代码引起的。这使我怀疑您是否正在运行较旧版本的服务器,并且您实际上没有使用r正在运行此版本的服务器。您可以检查正在运行的进程或重新启动服务器,然后从头开始运行此进程,或更改正在运行的端口。您真的在编写代码时每个缩进级别有一个空格吗?性感、干净,是的。但是对套接字有什么想法吗?您是说第一个连接的套接字显示连接吗ons.length
as 18324?仅供参考,io.sockets.on()
应该是io.on()
。是的,它实际上是垃圾邮件发送io.sockets.on('connection')。我将其更改为io.on(),效果相同。当我使用您的HTML页面运行您的确切服务器代码时(加载了http://localhost:3000
,我在控制台中看到这一点:服务器正在运行…已连接:1套接字已连接
。我根本看不到您的问题。因此,正在发生的其他事情不仅是由您显示的代码引起的。这使我怀疑您是否正在运行较旧版本的服务器,并且您实际上没有使用r正在运行此版本的服务器。您可以检查正在运行的进程或重新启动服务器,然后从头启动此进程或更改正在运行的端口。