最新消息: 电脑我帮您提供丰富的电脑知识,编程学习,软件下载,win7系统下载。

Socket.io:socket.emit没有发出客户端 socket.on没有接收服务器端

IT培训 admin 8浏览 0评论

Socket.io:socket.emit没有发出客户端/ socket.on没有接收服务器端

所以我正在玩socket.io试图制作一个多人迷你游戏,但我正在使用客户端的socket.emit()函数无效。它既不会在客户端浏览器上也不会在服务器控制台上引发错误。它只是不会发出事件。也许是socket.on()服务器端没有收到它。

有一个html文件夹,包含jquery.js,socket.io-1.2.0.js,index.html,main.js和style.css

这是基本代码,但最后是整个代码的pastebin:

客户端:

const socket = io();
socket.emit('pos', player);

socket.on('pos', (pos) => {
  if (player.show = true) {
    canvasCtx.fillStyle = "#7c5c5c";
    canvasCtx.fillRect(player.x, player.y, playerwidth, playerheight);

    canvasCtx.fillStyle = "grey";
    canvasCtx.fillRect(player.x, player.y + playerheight, shadow_width, 
    shadow_height);
  }

我有一个完美的画布和播放器字典。

服务器端:

var path = require("path");
var express = require('express');
var app = express();
var http = require('http').Server(app);
var io = require('socket.io')(http);

app.use(express.static('html'))
app.get('/', function(req, res){
  res.sendFile(path.resolve(__dirname + '/html/index.html'));
});

io.on('connection', function(socket){
  socket.on('pos', (player) => {
    io.emit('pos', player);
    console.log('Received player data with values : ' + player.x + ' for x ' 
    + player.y + ' for y '+ player.skin + 'as a skin')
  });
});

http.listen(3000, function(){
  console.log('listening on *:3000');
});

我使用npm来安装express和socket.io

pastebin:

谢谢

回答如下:

您不需要提供自己的socket.io客户端库副本。当socket.io初始化时,它添加了中间件来在路径socket.io.js上提供/socket.io/socket.io.js。您可以在运行应用程序时访问http://localhost:3000/socket.io/socket.io.js来验证这一点。

所以在你的html中,而不是<script src="socket.io-1.2.0.js"></script>,尝试使用<script src="/socket.io/socket.io.js"></script>。这应该确保您的问题不是由socket.io的客户端和服务器版本之间的不匹配引起的。

Socket.io:socket.emit没有发出客户端/ socket.on没有接收服务器端

所以我正在玩socket.io试图制作一个多人迷你游戏,但我正在使用客户端的socket.emit()函数无效。它既不会在客户端浏览器上也不会在服务器控制台上引发错误。它只是不会发出事件。也许是socket.on()服务器端没有收到它。

有一个html文件夹,包含jquery.js,socket.io-1.2.0.js,index.html,main.js和style.css

这是基本代码,但最后是整个代码的pastebin:

客户端:

const socket = io();
socket.emit('pos', player);

socket.on('pos', (pos) => {
  if (player.show = true) {
    canvasCtx.fillStyle = "#7c5c5c";
    canvasCtx.fillRect(player.x, player.y, playerwidth, playerheight);

    canvasCtx.fillStyle = "grey";
    canvasCtx.fillRect(player.x, player.y + playerheight, shadow_width, 
    shadow_height);
  }

我有一个完美的画布和播放器字典。

服务器端:

var path = require("path");
var express = require('express');
var app = express();
var http = require('http').Server(app);
var io = require('socket.io')(http);

app.use(express.static('html'))
app.get('/', function(req, res){
  res.sendFile(path.resolve(__dirname + '/html/index.html'));
});

io.on('connection', function(socket){
  socket.on('pos', (player) => {
    io.emit('pos', player);
    console.log('Received player data with values : ' + player.x + ' for x ' 
    + player.y + ' for y '+ player.skin + 'as a skin')
  });
});

http.listen(3000, function(){
  console.log('listening on *:3000');
});

我使用npm来安装express和socket.io

pastebin:

谢谢

回答如下:

您不需要提供自己的socket.io客户端库副本。当socket.io初始化时,它添加了中间件来在路径socket.io.js上提供/socket.io/socket.io.js。您可以在运行应用程序时访问http://localhost:3000/socket.io/socket.io.js来验证这一点。

所以在你的html中,而不是<script src="socket.io-1.2.0.js"></script>,尝试使用<script src="/socket.io/socket.io.js"></script>。这应该确保您的问题不是由socket.io的客户端和服务器版本之间的不匹配引起的。

发布评论

评论列表 (0)

  1. 暂无评论