我正在制作一款多人游戏,该游戏使用 websockets 在所有连接的玩家之间共享游戏状态。
我决定将 socket.io 与 koa 一起使用,现在我面临以下问题。
首先,当用户连接到服务器时,会创建一个新玩家。
const playersMeta = {}
io.on('connect', socket => {
const playerId = uniqid() // Creates a new unique id for a player
playersMeta[socket.id] = { playerId } // Stores the players id using the socket.id as key
socket.on('disconnect', () => {
delete playersMeta[playerId]
})
})
问题是玩家需要知道服务器分配给它的唯一 ID。原因是有一个游戏状态告诉每个连接的玩家所有实体在哪里。摄像机跟随您进入游戏时创建的玩家,这就是为什么我需要知道摄像机应该跟随哪个玩家。
我可以创建一个新的 socket.io 事件,然后播放器发出一个事件,返回您想要的 id,但它看起来变得太复杂了。
事件很适合在不同客户端之间实时同步,数据也需要更改,但我确信玩家的 ID 不会更改。
也许最好只创建一个 api 休息端点来获取此数据。我正在使用 Koa,我不确定是否可以使用相同的 websocket 连接而不是使用 http。
你不能将它发送到同一个套接字吗?
const playersMeta = {}
io.on('connect', socket => {
const playerId = uniqid() // Creates a new unique id for a player
playersMeta[socket.id] = { playerId } // Stores the players id using the socket.id as key
socket.emit('connected', { serverId: 'foo'});
socket.on('disconnect', () => {
delete playersMeta[playerId]
})
});
在您的客户端上:
var socket = io('http://server');
socket.on('connected', function (data) {
console.log(data); // { serverId: 'foo'}
// do whatever you want with the servid
});
我是一名优秀的程序员,十分优秀!