2012-03-20 3 views
3

Я просто хочу проверить некоторые данные с помощью nodejs & socket.io на стороне сервера.Проверка на стороне сервера с socket.io

Так что я отправить данные с socket.emit('validate data', data)

Мой подход все же сделать это, отправив ответ на стороне сервера обратно, как это ...

socket.emit('validated data', boolean })

..и получить этот ответ на на стороне клиента обратно, как это ...

socket.on('validated data', function (boolean) { 
    validationResponse = boolean; 
}); 

Это, кажется, очень неудобно и inefficiente для просто логическое. Я думаю, что это очень общий вопрос о связи между сервером и клиентом с сокетами, поэтому объяснение будет очень полезно.

Есть ли лучшее решение для получения прямого ответа булевых или крошечных данных?

ответ

0

Моего вопроса был в течение более короткого или более безопасного кода, но, как я подозревал с:

Я думаю, что это очень общий вопрос о сервере - клиент связи

.. был есть ошибка в размышлении о связи на моей стороне. Проблема заключается в том, что безопасность не лучше, если вы пытаетесь защитить приложение такими процессами, потому что ваш клиент уже мог подделать возвращаемое логическое значение на стороне клиента.

Итак, в любом случае, я предпочитаю его проверять, но если пользователь отправит сообщение с недопустимым/принятым именем пользователя, сообщение не будет отправлено другим клиентам, а сам клиент получит сообщение, подобное username already taken.

buddys, извините & спасибо за ответы. Особая благодарность @ThiefMaster

0

А как насчет регулярного выражения для проверки ваших полевых входов? Вы можете хранить эти регулярные выражения в атрибуте в каждом элементе, применяя их по классу ввода. Trigger этих проверок достоверности на событиях, как change или blur, и вы хорошо идти ...

<input type="text" regex="(a|b)" /> 

<input type="text" class="regex typeA" /> 

JQuery и другие ЛИЭСЫ JavaScript имеют хорошие плагин проверки формы, но вы можете создать его самостоятельно, а также:

$('.regex').each(function(el) { 
    if ($(el).hasClass('typeA')) { 
    // doValidation 
    } 
}); 

Если вам необходимо использовать свой сервер для проверки ввода пользователя, нет возможности использовать WebSockets или AJAX-запросы для проверки. WebSockets производят меньше трафика данных, конечно ...

+0

«Я просто хочу проверить некоторые данные с помощью nodejs & socket.io ** на стороне сервера **». - по некоторым соображениям безопасности вы ** не можете доверять пользователю ** каждый раз. Без критических валидностей я уже реализовал проверки с регулярными выражениями :) – mrzmyr

+0

так почему вы спрашиваете? сокетов или простых вызовов ajax, у вас есть оба ответа на руку. Поскольку указанные сокеты создают меньше трафика, [Socket.IO] (http://socket.io/) является моим фаворитом для использования WebSockets ... – sbstjn

+3

@ M.Myer Проверка на стороне сервера, которая возвращает только действительный/недействительный, не лучше, чем клиент- если он не может выполнить более точную проверку, чем клиент (например, проверка «имя пользователя взята?»). Таким образом, любая проверка * перед * фактическая подача формы может быть выполнена локально. – ThiefMaster

0

Моя догадка - нет, на самом деле нет лучшего (то есть более подозрительного) решения. Я лично считаю, что ваш код is довольно короткий. Если вам нужен более короткий код, моя единственная рекомендация - использовать более короткие имена идентификаторов.

Если ваш код сервера выполняет только один тип операции, вы можете устранить свои события и просто использовать socket.send(data) с socket.on("message", fn) вместо socket.emit.

Смежные вопросы