我正在使用node.js和socket.io进行游戏,我只想使用socket.emit()和socket.on()将变量发送给客户端。但是,这似乎不起作用,我不确定为什么。我编写了一个精简程序,以查看我是否正确编写了此程序,因为我对socket.io非常陌生。
//server
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 started.');
var SOCKET_LIST = {};
var PLAYER_LIST = {};
var optypes = [Math.floor(Math.random()*6), Math.floor(Math.random()*6), Math.floor(Math.random()*6), Math.floor(Math.random()*6)]
var op1 = {
x: 450,
y: 600,
type: optypes[0]
}
socket.emit('operations', op1);
<canvas id="ctx" width="900" height="1400" style="border:1px solid #000000;"></canvas>
<script src="https://cdn.socket.io/socket.io-1.4.5.js"></script>
<script>
//client
var ctx = document.getElementById("ctx").getContext("2d");
ctx.font = '30px Arial';
var socket = io();
socket.on('operations', function(data) {
console.log(data);
});
</script>
是socket.emit吗?是socket.on吗?都是吗为什么我在控制台中没有收到变量op1?
提前谢谢!
答案 0 :(得分:0)
您应该在connection
之后发射。否则,客户将不会收到它。在下面更改您的服务器代码
服务器
var express = require('express');
var app = express();
var serv = require('http').Server(app);
var io = require('socket.io')(serv);
app.get('/', function(req, res) {
res.sendFile(__dirname + '/client/index.html');
});
app.use('/client', express.static(__dirname + '/client'));
serv.listen(2000);
console.log('Server started.');
var SOCKET_LIST = {};
var PLAYER_LIST = {};
var optypes = [Math.floor(Math.random()*6), Math.floor(Math.random()*6), Math.floor(Math.random()*6), Math.floor(Math.random()*6)]
var op1 = {
x: 450,
y: 600,
type: optypes[0]
}
io.on('connection',(socket) =>{
socket.emit('operations', op1);
})
答案 1 :(得分:0)
您尚未在服务器代码中指定任何套接字io库。为了发出一个套接字,您必须等待直到建立连接。
//server
var express = require('express');
var app = express();
var serv = require('http').Server(app);
var socketio = require('socket.io')(serv);
app.get('/', function(req, res) {
res.sendFile(__dirname + '/client/index.html');
});
app.use('/client', express.static(__dirname + '/client'));
serv.listen(2000);
console.log('Server started.');
var SOCKET_LIST = {};
var PLAYER_LIST = {};
var optypes = [Math.floor(Math.random()*6), Math.floor(Math.random()*6), Math.floor(Math.random()*6), Math.floor(Math.random()*6)]
var op1 = {
x: 450,
y: 600,
type: optypes[0]
}
var connection = socketio
.on('connection', function (socket) {
socket.emit('operations', op1);
});
此外,您还需要在客户端代码中指定要连接到的服务器。如果要在端口2000上运行套接字服务器,则必须指定要连接到的服务器。
<canvas id="ctx" width="900" height="1400" style="border:1px solid #000000;"></canvas>
<script src="https://cdn.socket.io/socket.io-1.4.5.js"></script>
<script>
//client
var ctx = document.getElementById("ctx").getContext("2d");
ctx.font = '30px Arial';
var socket = io('http://localhost:2000');
socket.on('operations', function(data) {
console.log(data);
});
</script>