#node.js #socket.io #express
#node.js #socket.io #выразить
Вопрос:
Я немного играю с node.js и socket.io . Это фрагмент кода, который я пишу:
app.get('/play', function (req, res) {
//some code you don't need to see
var gameMessage = io.of('/game' gameId);
});
Все импортировано правильно. gameId
правильно установлена и io
переменная правильно инициализирована.
При запуске этого кода (при попытке получить доступ к localhost / play) Я получаю эту ошибку:
TypeError: Converting circular structure to JSON
at Object.stringify (native)
at Array.<anonymous> (/path/to/my/game/node_modules/express/node_modules/connect/lib/middleware/session/memory.js:74:31)
at EventEmitter._tickCallback (node.js:126:26)
Если я закомментирую var gameMessage
строку кода, я не получу ошибку. Итак, это порождает его.
Я бы хотел, чтобы эта строка оставалась там, потому что она создает экземпляр канала, который мне нужен. Таким образом, два человека могут играть вместе в мою игру. Если я не создам этот экземпляр и попытаюсь запустить некоторый код на стороне клиента, например
var chat = io.connect('http://localhost/chat' gameId);
chat.emit('guess', {
guess: "ciao"
});
chat.on('guess', function (data) {
alert(data);
});
Я получаю бесконечный цикл ошибок в консоли, когда подключается второй игрок.
Может кто-нибудь догадаться, что с этим не так? Спасибо.
Ответ №1:
То, что вы делаете, неправильно, вы не должны помещать этот сокет.Ввод кода ввода-вывода в ваш маршрут, Express.js приложения и сокет.Приложения ввода-вывода не «подключаются» подобным образом.
Создайте отдельный файл с вашим сокетом.Сервер ввода-вывода, затем используйте socket.io-client, когда вы хотите подключиться к сокету.Ввод-вывод (со стороны сервера ИЛИ клиента), например, для отправки сообщения.
Комментарии:
1. Я хотел бы иметь отдельный канал для каждой пары игроков, но эти каналы будут создаваться по мере подключения двух игроков. Возможно ли сделать что-то подобное?
2. Вы можете сделать что-то еще, заставить каждого пользователя подключаться к его каналу. Например, когда «Алекс» отправляет сообщение «Джиму», «Джим» получит сообщение, потому что он прослушивает канал «Jim», и наоборот.