Взаимодействие сокетов браузера на стороне клиента для веб-приложения - лучший способ?

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

Я хочу развернуть размещенный в Интернете веб-сайт для обслуживания ряда удаленных терминалов, которые будут оснащены устройствами для считывания платежных карт Chip & Pin (также известными как пинпады). Пинпады управляются некоторым программным обеспечением на ПК в терминале, которое написано третьей стороной. Методы интеграции, поддерживаемые этим программным обеспечением, основаны либо на текстовых файлах, либо на основе сокетов с рабочим процессом «запрос» и «ответ».

Я успешно выполнял аналогичные интеграции в прошлом, используя сценарий VB на стороне клиента для создания экземпляров COM-объектов на стороне клиента, которые взаимодействуют через соединение через сокет с локальным сторонним программным обеспечением, но этот подход привязывает меня к Windows, и я бы предпочел оставить мои варианты открытыми.

Мой веб-сервер будет основан на Ruby On Rails, и я намерен использовать HTML5 и CSS3, чтобы обеспечить богатый опыт работы с платежными терминалами, и мне интересно, могу ли я использовать веб-сокеты для связи на стороне клиента? Насколько я понимаю, это не то, для чего они предназначены, поэтому я думаю, что ответ отрицательный.

Итак, каковы мои варианты? Могу ли я использовать JavaScript на стороне клиента для связи через сокеты или это предотвращается мерами безопасности браузера? С точки зрения браузера он будет связываться с определенным пронумерованным портом на «localhost».

Если связь через сокеты невозможна, могу ли я использовать JavaScript для создания текстовых файлов на стороне клиента для интеграции таким образом?

Или я застрял со сценарием VB и локальными COM-объектами?

Любые предложения будут приветствоваться, и, пожалуйста, дайте мне знать, если вам нужны разъяснения по любому аспекту моего вопроса.

С уважением, Крейг.


person craig1410    schedule 25.03.2011    source источник


Ответы (2)


Я не думаю, что вы можете написать текстовый файл с помощью JavaScript. И вы также не можете помещать произвольные байты в сокет. Я не совсем понимаю ваш сценарий. Похоже, у вас есть Ruby, работающий на сервере, и JavaScript, и этот сторонний пинпад, работающий на клиенте. И вам нужно, чтобы два клиентских объекта могли общаться друг с другом. Не могли бы вы заставить браузер связываться с вашим сервером Ruby (используя одну из многих веб-технологий), а затем заставить ваш сервер Ruby передавать данные обратно в сокет пинпада. Или пинпад только локальный сокет?

person Fantius    schedule 25.03.2011
comment
Привет, да, у меня есть Ruby On Rails, работающий на размещенном сервере, предоставляющий большую часть функциональности веб-сайта с пинпадом, работающим на клиентской машине (терминал торговой точки) со сторонним программным обеспечением, работающим на клиенте, прослушивая входящие команды. Клиент работает под управлением браузера (в настоящее время IE8) и в настоящее время использует VBScript для создания экземпляра пользовательского COM-объекта ActiveX для управления пинпадом через подключение к локальному сокету. Я ищу лучшее решение. Я надеюсь, что это проясняет. Спасибо! - person craig1410; 30.03.2011
comment
Если пинпад может только прослушивать локальный хост и читать локальные файлы, вам нужно сделать что-то вроде того, что вы делаете. ActiveX, Java, Flash или Silverlight. Кажется, что ActiveX — худший выбор, так как он работает только в IE и по существу устарел. - person Fantius; 30.03.2011
comment
Да, вы правы, я использовал ActiveX только потому, что уже был с ним знаком. Я программист Java, поэтому я думаю, что рассмотрю это как вариант. Вариант плагина для браузера, предложенный Трэвисом Уэббом выше, также возможен, но я предпочитаю Java. Спасибо еще раз. - person craig1410; 02.04.2011
comment
Верно, но тогда вы не кроссбраузерны. - person Fantius; 05.04.2011

Единственный тип соединения на основе сокета, который вам разрешено открывать на стандартной веб-странице, на которой выполняется javascript, — это сокет HTTP. У вас будет гораздо больше свободы в использовании сокетов, если вы разработаете плагин для браузера, написанный на javascript. Насколько я знаю, Firefox поддерживает сокеты в расширениях.

https://developer.mozilla.org/en/XPCOM_Interface_Reference/nsISocketProvider

person Travis Webb    schedule 25.03.2011
comment
Привет, спасибо за это предложение - я вполне могу изучить это, если не найду лучшего метода. Я надеялся избежать каких-либо проприетарных решений, если это возможно, чтобы оставить открытыми параметры платформы и браузера, но это может быть невозможно. Спасибо еще раз. - person craig1410; 30.03.2011
comment
Я поясню это для вас: по замыслу это невозможно. Браузеры специально и целенаправленно разработаны, чтобы не допускать этот тип связи через сокеты. - person Travis Webb; 30.03.2011