Вы можете хранить файлы *.obj
& *.mtl
на одном сервере.
Обратите внимание, что код вашего узла и веб-сервера не может выполняться на одном и том же порту. Вы должны использовать обратный прокси-сервер или прослушивать разные порты.
Это предотвращает проблемы между сайтами. Например: создайте на своем веб-сервере каталог, доступный для публикации c: http://example.com/assets/babylon-files
В вашем коде node теперь вы можете запускать клиенты для загрузки файлов по этому пути:
// socket.io logic above
// waiting for connetions, auth, etc...
// tell conencted clients what the should load from
// http://example.com/assets/babylon-files
socket.broadcast.emit('loadAsset', 'house.obj');
socket.broadcast.emit('loadAsset', 'car.obj');
socket.broadcast.emit('loadAsset', 'wall.obj');
Клиент должен выглядеть примерно так:
// listen for socket.io events from server here
io.on("loadAsset", (filename) => {
// tell babylon to load assets
BABYLON.SceneLoader.Load("/assets/babylon-files", filename, engine, function (scene) {
// do something with the scene
});
// - or -
// tell babylon to append assets
BABYLON.SceneLoader.Append("/assets/babylon-files", filename, function (scene) {
// do something with the scene
});
});
Точно так же вы можете отправлять двоичные данные клиентам:
fs.readFile("/path/to/obj<or>mtl/file", (err, buff) => {
if (err) {
res.status(500).end();
return;
}
socket.binary(true).emit("loadAsset", buff);
});