【问题标题】:socket.io emit function server side only?socket.io 仅在服务器端发出功能?
【发布时间】:2016-01-04 22:32:11
【问题描述】:

我正在尝试开发一个实时画布游戏,我有一些具有我需要的基本功能但不使用 node 或 socket.io 的代码


如何将这个函数发送给所有客户端?

 function init()
    {
         numShapes = 10;
         shapes = [];
         drawScreen(); 
         ctx= canvas.getContext('2d'); 
         setInterval(draw,10);
         makeShapes();
    }

https://jsfiddle.net/a9b3rm5u/5/


我现在正在尝试添加一个实时元素,但无法理解 socket.emit。我如何将球从服务器发射到所有客户端?然后为点击事件使用客户端代码?

【问题讨论】:

  • 如果您希望根据来自服务器的位置信息在客户端同步绘制圆圈,最好通过套接字流式传输位置数据并让客户端绘制数据。
  • 但是所有客户端画布上的圆圈需要相同吗?但我应该将运动数据发送给客户端,然后在客户端绘制形状?我将如何实现这一目标?
  • 流式传输数据:[{ id: 'circle1' x: 10, y: 40, radius: 10 }].
  • 为什么不使用 node 或 socket.io。您是否希望在特定的服务器环境上进行工程设计?

标签: javascript node.js socket.io


【解决方案1】:

这取决于你想要发出什么。

我首先建议您查看他们网站上的聊天示例http://socket.io/get-started/chat/,了解如何在您的代码中设置 socket.io。

这里有关于如何设置 Node.js 和 Socket.io 的信息,您需要这两者才能使用 socket.emit

您对客户端服务器端交互的担忧不是问题。你只能做一个或两个。

你可能有这样的东西:

io.on('connection', function(socket){
    socket.emit('coordinates', {x: /* your shape's x data */, y: /* your shape's y data */);
});

【讨论】:

  • 我已经用socket和express建立了一个节点服务器,所以我应该只发送x和y坐标吗?但如果我有多个形状?他们搬家了?抱歉,我的知识非常缺乏,只是无法通过我所看到的示例来理解它。
  • @Noobcoder 去做一些关于循环遍历数组和对象的研究。要捕捉运动,您必须不时更新emit,使用事件或时间间隔。
【解决方案2】:

在您的服务器上,如果服务器有球,那么您可以通过以下方式获取该球并将其发送给每个连接的客户端:

io.emit('ballMove', {x: /*x coordinate of ball*/, y: /*y coordinate of ball*/});

在您的客户端套接字上,您必须侦听服务器发出的“ballMove”。

类似:

socket.on('ballMove', function(data){
    //get the x and y passed by server from the data argument

    //update the clients local ball with the x & y coordinate passed by the server
    ball.x = data.x;
    ball.y = data.y; 
});

如果您希望套接字将其本地球的坐标广播给其他客户端,但发出它的套接字除外,那么您可以:

socket.broadcast.emit('ballMove', { x: ball.x, y:ball.y});

服务器上所有连接的客户端监听ballMove 将接收数据,但发出事件的套接字除外。

【讨论】:

    猜你喜欢
    • 2013-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-15
    • 2011-09-22
    • 2019-07-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多