2016-07-18 2 views
0

Я запустил websocket на сервере Linux для обслуживания подключенных клиентов с использованием локальной сети. моя цель - позволить клиенту контролировать некоторые конфигурации.вызов функции с использованием ключа JSON и значения в Python

Веб-приложений (усугубляются из PHP и HTML страниц) играют рулон в качестве интерфейса, , когда страница загружается он подключается к WebSocket, используя чистый Javascript var socket = new WebSocket("ws://SERVER_NAME:90/"); HTML-элемент = вход [ «текст»] следует отправьте объект JSON, у которого есть ключ и значение, например:

var data = {};
data.key = input_value;
socket.send (JSON.stringify (данные));

Чтобы быть более ясным: допустим, что key здоровается и value является Привет, Таким образом, после кодирования JSON, строка {"Greeting":"Hello"} будет отправлена ​​на сервер, используя веб-сокет, как уже упоминалось, где магазины сервера, то в буфере STDIN пока скрипт веб-сокета не прочитает его.

Python Сценарий Web Цоколь:

data = json.loads(stdin.readline()); 
for x in data: 
    # the code that run the function Greeting 
    pass 

в одном слове:

Как вызвать функцию (приветствие) which is the JSON-KEY и передать аргумент Hello в качестве входного параметра which is JSON-VALUE

Мой веб-сокет в порядке, и я могу получить любую строку от любого клиента,

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

Извините за этот длинный вопрос, но это необходимо для решения этой проблемы. Я благодарен за любую помощь или предложение.

ответ

0

Как правило, вы бы упаковать функции в Словаре:

def greeting(value): 
    print "Hello " + str(value) 

FUNC_MAP = { 
    'Greeting': greeting, 
} 

И затем вызвать функцию,

data = json.loads(stdin.readline()); 
for func_name, value in data.items(): 
    FUNC_MAP[func_name](value) 

Конечно, могут быть некоторые улучшения, которые вы могли бы сделать здесь (например, обработка ошибок для функций, которых нет, и т. д.).

+0

Большое вам спасибо ... это то, что мне нужно ... но, пожалуйста, есть небольшая ошибка, которая (не может соединить целочисленное значение с «Hello») .. но все сделано правильно –

+0

@AbdulkaderKhateeb - I обновляется, поэтому при обновлении также должна быть ошибка. (например, ''Hello' + str (значение)', а не ''Hello' + value') – mgilson

+0

Mr, @mgilson, не могли бы вы рассказать мне, как выбрасывать исключение, когда вызывать функцию, которая не находится в словаре. Я совершенно новый для Python, .. большое спасибо :) –

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