Ответ: Node.JS + MongoDB
А ты для задержки всегда setTimeout используешь? Я сейчас пользуюсь setImmediate для создания асинхронности. Она вроде откладывает выполнение до следующего цикла.
И еще вопрос: как правильно запускать/останавливать/перезапускать node js на сервере? Я пока только на windows его запускал. |
Ответ: Node.JS + MongoDB
Цитата:
Но имхо, если у тебя операция на столь тяжёлая и уже потребовала слишком много времени, тогда я советую пересмотреть либо операцию, либо выдвинуть её в отдельный node процесс и общаться с ним через ZeroMQ, тем самым - это будет точно асинхронно (главный процесс не будет выполнять задачу, и сможет паралельно заниматься своими вещами). Цитата:
На win, при разработки в Sublime Text 2, есть аддон для настроек компиляции. Тупо - билдишь, и в консоль будет выдаваться консоль. Но нужно дополнительно скрипт для остановки процесса (а то если ты сокет биндишь и не остановишь прошлый процесс, новый не сможет сокет создать на том же порту). А для деплоймента использовал NSSM ( http://nssm.cc/ ) - Non-Sucking Service Manager - очень понравился. В win редко когда есть хорошие туулзы и минималистичные как в unix. В общем он создаёт сервис в системе, и следит за ним. Можно настроить разные сценарии если процесс сервиса падает - перезапускать например сразу. Не для всех конечно случаев, но для многих я тупо сделал сервис на текущий разрабатываемый проект, и всё что нужно было, это останавливать процесс, и сервис перезапускал его автоматически так что заместо - остановить > запустить, я только один клик остановки - и уже мог идти тестировать. Единственное что логи нужно тогда придумать как слать, для этого я winston сделал и отдельный монитор с дашбоардом консоля :) На linux, есть два способа, первый проще и быстрее - screen. Делаешь отдельный screen и запускаешь там, затем детачишься из скрина если не нужно там быть. Но лучше конечно написать скрипт для сервиса, плюсов много - логи можно в файл по стандарту выводить. Автозапуск при рестарте компа. Удобно рестартовать: service api restart Вот файл для скрипта, кладём в /etc/init.d/ я назвал его "api". Работает на RedHat системах и Ubuntu. Естественно замени пути к твоим файлам сам. service api start service api stop service api restart Логи по стандарту тут: /var/log/api.log PHP код:
|
Ответ: Node.JS + MongoDB
Я так понял что нельзя обновить несколько членов массива за один запрос?
|
Ответ: Node.JS + MongoDB
Почему нет?
Под обновить - что ты имеешь ввиду конкретно? Тест - обновляет: PHP код:
|
Ответ: Node.JS + MongoDB
Мне надо у каждого объекта в массиве обновить поле или несколько полей. А не каждый итем обновлять по индексам.
Я пробовал такой запрос: PHP код:
в итоге наткнулся на это: https://jira.mongodb.org/browse/SERVER-1243 |
Ответ: Node.JS + MongoDB
А оператор $ да, обновит только первый найденный элемент в твоём случае..
Выход будет - подгрузить, выбрать в JS то что нужно, и обновить уже с новым списком. Будь осторожен если есть возможность делать эту операцию одновременно, т.к. тогда нужно будет лочить запись - чтобы предотвратить перекрёщивание двух операций с другими запросами на этот же документ. |
Ответ: Node.JS + MongoDB
Получил вот такое:
Как с этим бороться? |
Ответ: Node.JS + MongoDB
ETIMEDOUT это системная ошибка, а не самого node.js, видимо что-то на уровне TCP происходит, а node.js просто продвигает её.
Нужно знать как ты добиваешься такой ошибки, т.к. я на практике её не встречал. Если хочешь избежать падения процесса, можешь попробовать её поймать, возможно есть event для сокета (т.к. возможно ты с сокетами это ловишь): PHP код:
В продакшане очень не рекомендуется - т.к. это будет ловить не пойманные ошибки, но при этом оставлять процесс жить, когда последствия ошибки могут быть "не желательными". |
Ответ: Node.JS + MongoDB
Поставил обработчик пока на unhandledException.
Как оно получается я пока не знаю. У меня сейчас два процесса, т.к. я использую кластер на одном ядре виртуального сервера. REST API на основе express (http и https) в воркере. В мастере я запустил модуль cron, по которому я подсчитываю и обновляю статистику (это только подключение к MongoDB и асинхронное обновление). Других операций с сокетами я не делаю... |
Ответ: Node.JS + MongoDB
Запустил у себя на сервере наконец по дефолту вместо апача node js и думаю сейчас... а есть ли какой-то миддлваре для express, который может переадресовать для определенных хостов запрос на другой порт сервера, где запущен апач...? Если я вдруг захочу для дочернего домена сделать сайтик на php и использовать его на дефолтном порту...
|
Ответ: Node.JS + MongoDB
Есть, только его лучше использовать до главного API приложения.
http-proxy - проксит всё, вплоть до вебсокетов. Шустрый и используется nodejistu (хостинг node). https://github.com/nodejitsu/node-http-proxy Там всё по сути просто. Пишешь мелкий proxy app на ноде, указываешь разные прокси куда и как раскидывать, там есть куча вариантов проксить, вплоть до ручного определения. Получается запускаем proxy на 80 порту, далее API на другом, и проксим к API по дефолту. Apache запускаем тоже на другом порту, и проксим на него тоже по субдомену (например), а можно и по субдиректории. Если юзаешь AWS советую заюзать Route53 - домен менеджер, создание субдомена и обновление DNS записей занимает пару минут а не сутки. |
Ответ: Node.JS + MongoDB
Что-то не могу составить запрос на удаление поля HandR UPD: получилось PHP код:
|
Ответ: Node.JS + MongoDB
moka А не можешь ли привести пример простенького реалтаймового сервера, передающего координаты игроков. Я бы хотел node js и Unity связать через TCP.
|
Ответ: Node.JS + MongoDB
Примеры есть, только они на socket.io, следственно там только игровая логика и никакой сетевой, т.к. всё уже сделано используя socket.io. Но, естественно можно и сделать сериализацию и десериализацию на обоих сторонах. Проще будет начать с JSON'а, а потом что-то придумать дельнее.
Вот немного говнокода, писалось 24 часа, потом чуток приводилось в порядок но совсем чуток. https://github.com/Maksims/beat-em-up Играть тут: http://moka.co:88/ UPD: Я не советую, но есть socket.io клиент для unity: https://github.com/NetEase/UnitySocketIO |
Ответ: Node.JS + MongoDB
Не пойму как выполнить поиск с использованием регулярных выражений и символов юникода (русский текст).
Получилось, PHP код:
|
Часовой пояс GMT +4, время: 13:54. |
vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot