编辑:我通过将localhost替换为我的公共IP,然后将端口转发端口4200替换到我的计算机来实现它。
编辑2:在某些时候修复它。更新socket.io修复了一下。我现在设置了一个计时器,如果它自己没有被调用,在5秒后运行onConnect
(糟糕的黑客,我知道,但是唯一可以确保它被调用的方法)
编辑3:不,我认为是因为我在onConnect有机会运行之前正在运行相位器状态。我现在改变了它,以便从onConnect中调用相位器状态。
我正在开发一款小型多人平台游戏,但遇到了网络问题。第一个连接的客户端工作得很好:它连接,创建一个播放器,更新服务器等。然而,第二个客户端根据服务器连接,但从不调用本地onConnect函数。而且奇怪的是,它偶尔决定它想要正常工作 - 连接两个客户的事件火灾,我有两个参与者。
客户端
var socket = io.connect("http://localhost:4200");
...
function setEventHandlers(localPlayer){
player = localPlayer;
console.log("Event handlers set");
socket.on("connect", onConnect);
socket.on("disconnect", onDisconnect);
socket.on("new player", onNewPlayer);
socket.on("move player", onMovePlayer);
socket.on("remove player", onRemovePlayer);
}
function onConnect(){
console.log("Connected to server");
// Send local player to server
socket.emit("new player", player.getSendableObject());
}
服务器
socket = io.listen(PORT);
...
function setEventHandlers(){
socket.sockets.on("connection", onConnect);
}
function onConnect(client){
util.log("Client connected: " + client.id);
client.on("disconnect", onDisconnect);
client.on("new player", onNewPlayer);
client.on("move player", onMovePlayer);
}