node.js - Socket.io | 类型错误:socket.emit 不是函数
问题描述
我见过很多问题,但没有一个能解决我的问题。
这是我的 JS (app.js) 代码:
var express = require('express');
var app = express();
var serv = require('http').Server(app);
app.get('/', function(req, res) {
res.sendFile(__dirname + '/client/index.html');
});
app.use('/client', express.static(__dirname + '/client'));
serv.listen(2000);
console.log('Server has started.');
var socket_list = {};
var io = require('socket.io')(serv, {});
io.sockets.on('connection', function(socket) {
console.log('Socket Connection');
socket.id = Math.random();
socket.x = 0;
socket.y = 0;
socket_list = socket.id = socket;
});
setInterval(function() {
for(var i in socket_list) {
var socket = socket_list[i];
socket.x++;
socket.y++;
socket.emit('newPosition', {
x: socket.x,
y: socket.y
});
}
}, 1000/25);
这是我的 HTML (index.html) 代码:
<!DOCTYPE html>
<html>
<head>
<title>Multiplayer | HTML5</title>
<script src="https://cdn.socket.io/socket.io-1.4.5.js"></script>
</head>
<body>
<canvas id="ctx" width="512" height="512" style="border: 1px solid #000;"></canvas>
<script type="text/javascript">
var ctx = document.getElementById('ctx').getContext('2d');
ctx.font = '24px Calibri';
var socket = io();
socket.on('newPosition', function(data) {
ctx.clearRect(0,0,500,500);
ctx.fillText('P', data.x, data.y);
})
</script>
</body>
</html>
我正在关注本教程:https ://www.youtube.com/watch?v=_GioD4LpjMw&feature=youtu.be
它已经 3 岁了,但一切都很顺利,直到视频中的 4:47 ^^。
使用上面完全相同的代码^^我得到了这个:
解决方案
您正在用一个对象替换 Socket 列表Socket
对象。也使用io.on
.
io.sockets.on('connection', function(socket) {
console.log('Socket Connection');
socket.id = Math.random();
socket.x = 0;
socket.y = 0;
socket_list = socket.id = socket;
});
您需要将其更改为,
io.on('connection', function(socket) {//use io.on
console.log('Socket Connection');
socket.id = Math.random();
socket.x = 0;
socket.y = 0;
socket_list[socket.id] = socket;//fix this error
});
更改io.emit
为socket.emit
。
socket.emit('newPosition', {
x: socket.x,
y: socket.y
});
推荐阅读
- c# - DataGridComboBoxColumn 的 IValueConverter 错误
- angular - 空主干字符导致连接关闭和 Chrome 在浏览器中记录 CORS 错误
- ios - iOS Today Extensions 可以进行串行调试吗?
- statistics - 正确解释正态分布的直方图
- r - 循环/重复一个字符串直到达到给定的长度,然后计算一个特定的字母
- javascript - 如何同时打开两个模态窗口
- json - 如何使用 groovy 修改 jenkins 工作区上的 JSON 属性?
- php-7 - $_GET 在代码中不工作,在升级到 PHP7 之前工作
- ios - 如何在iOS中获得内存地址的内存保护(vm_prot_t)
- android - Firebase 数据库从不更新我在特定子项中的值