javascript - 为什么带有socket.io的nodejs服务器会导致连接无限循环?
问题描述
我们是一个由 2 名开发人员组成的小组,他们试图用 node js 和 socket.io 实现一个简单的聊天服务器。我们正在使用 github。当我拉动我的合作伙伴更改并启动 npm 时,我发现我的控制台在无限循环中输出“用户已连接” 。
这是代码(用于输出连接一次的用户的部分:socket.on('user login', function(newuser)
...)。
index.js:
//dependencies
var app = require('express')();
var http = require('http').Server(app); //http server
//initialize a new instance of socket.io by passing http server
var io = require('socket.io')(http);
var users = []; //List of online users
app.get('/', function(req, res){
res.sendFile(__dirname + '/index.html');
});
io.on('connection', function(socket){
console.log('a user connected');
socket.on('disconnect', function(){
console.log('user: '+socket.username + ' logged out.');
var date = new Date();
io.emit('info message', {timestamp: date.toUTCString(), user: socket.username + ' logged out.'});
//TO DO: Delete user from list.
});
...
index.html脚本:
<script src="https://cdn.socket.io/socket.io-2.1.1.js"></script>
<script>
$(function () {
var socket = io();
/*
* On submit of form with id 'entername' client sends entered username to server.
* After sending div-Container loginDiv will be hidden and messageDiv will be shown.
* And last: set value of usernameinput to ''.
* */
$('#enterName').submit(function () {
//console.log($('#userNameInput').val());
socket.emit('user login',$('#userNameInput').val());
$('#loginDiv').hide();
$('#messageDiv').show();
$('#userNameInput').val('');
return false;
});
});
</script>
package.json依赖:
"dependencies": {
"body-parser": "^1.18.3",
"express": "^4.16.3",
"socket.io": "^2.1.1"
}
解决方案
正如我所怀疑的,我必须在客户端和服务器端使用相同的 socket.io 版本。因此,我再次安装了socket.io(服务器端),取了版本(在依赖项下的package.json中找到)并在此处搜索https://cdnjs.com/libraries/socket.io/以获取要绑定的脚本src到我的 html 中,以便将其加载到客户端。在我的情况下更新了 index.html 脚本源:
<script src="https://cdnjs.cloudflare.com/ajax/libs/socket.io/2.1.1/socket.io.js"></script>
之前,我只是将版本号更改为 src,而没有搜索正确的 url。
推荐阅读
- javascript - 如何使用 Selenium 和 Java 提取不在其自身标签内的文本节点的文本?
- android - 重复 android:theme androidmanifest
- python - 如何在使用碰撞块计算 pi 时防止快速移动的物体通过静力学
- c# - 在try/catch中捕获异常后如何测试Api是否返回特定消息
- reactjs - 为什么在 React-Redux 中未定义 this.props.username?
- android - DiffUtil.ItemCallback
被调用两次 - html - 如何将下拉菜单对齐到 mat-card-title 元素的右侧?
- javascript - 填充缺失数据的数组
- javascript - Javascript算法在1和0的矩阵中找到最大尺寸的正方形
- php - 如何通过 PHP 将数组存储在 cookie 中?