Socket.emit () и / или socket.on () не работают - PullRequest
0 голосов
/ 17 февраля 2019

Я делаю игру, используя 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 в консоли?

Заранее спасибо !!!

Ответы [ 2 ]

0 голосов
/ 17 февраля 2019

Вы не указали библиотеку сокетов 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>
0 голосов
/ 17 февраля 2019

Вы должны излучать после 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);
})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...