如何向所有连接的套接字广播 GoogleMaps 标记?

How can I broadcast a GoogleMaps marker to all connected sockets?

//CLIENT SIDE

// This event listener will call addMarker() when the map is clicked.
  google.maps.event.addListener(map, 'click', function(event) {
    addMarker(event.latLng);
    socket.emit('marker', {'lat': markers[0].position.k, 'long': markers[0].position.D});
    socket.emit('show-marker', addMarker);
  });
}

//CLIENT SIDE

// Add a marker to the map and push to the array.
function addMarker(location) {
  clearMarkers();
  markers = [];
  var marker = new google.maps.Marker({
    position: location,
    map: map
  });
  markers.push(marker);
  console.log(location);
  console.log("marker: " + markers[0].position.k + " " + markers[0].position.D);
}

//SERVER SIDE

socket.on('marker', function(data) {
  console.log('marker latitude: ' + data.lat + ', marker longitude:' + data.long);
});

到目前为止,我能够在任何玩家点击地图时(在客户端和服务器端)控制台记录纬度和经度位置。

您想在服务器端使用 socket.broadcast.emit('show-marker', data)。这将向所有其他玩家发出 'show-marker' 事件。试试这个:

客户:

var markers = [];

// This event listener will call addMarker() when the map is clicked.
google.maps.event.addListener(map, 'click', function(event) {

    var marker = addMarker(event.latLng);

    //Notice the spelling of longitude "lng"
    socket.emit('marker', {
        'lat': marker.position.k,
        'lng': marker.position.D
    });
});

// Add a marker to the map and push to the array.
function addMarker(location) {

    var marker = new google.maps.Marker({
        position: location,
        map: map
    });

    markers.push(marker);

    console.log(location);
    console.log("marker: " + marker.position.k + " " + marker.position.D);

    return marker;
}

//Listen for other players' markers
socket.on('show-marker', addMarker);

服务器:

io.on('connection', function(socket) {

    console.log('a user connected');

    //Listen for a marker event from a player
    socket.on('marker', function(data) {

        console.log('marker latitude: ' + data.lat + ', marker longitude:' + data.lng);

        //Broadcast marker location to every player except the one who sent it
        socket.broadcast.emit('show-marker', data);
    });
});