Лучший Python поддерживал протокол сервера/клиента?

Да, вы должны обновить свой код, чтобы использовать интерфейс Firebase Messaging. Для этого здесь есть проект GitHub .

using Stimulsoft.Base.Json;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Net;
using System.Text;
using System.Web;

namespace _WEBAPP
{
    public class FireBasePush
    {
        private string FireBase_URL = "https://fcm.googleapis.com/fcm/send";
        private string key_server;
        public FireBasePush(String Key_Server)
        {
            this.key_server = Key_Server;
        }
        public dynamic SendPush(PushMessage message)
        {
            HttpWebRequest request = (HttpWebRequest)WebRequest.Create(FireBase_URL);
            request.Method = "POST";
            request.Headers.Add("Authorization", "key=" + this.key_server);
            request.ContentType = "application/json";
            string json = JsonConvert.SerializeObject(message);
            //json = json.Replace("content_available", "content-available");
            byte[] byteArray = Encoding.UTF8.GetBytes(json);
            request.ContentLength = byteArray.Length;
            Stream dataStream = request.GetRequestStream();
            dataStream.Write(byteArray, 0, byteArray.Length);
            dataStream.Close();
            HttpWebResponse respuesta = (HttpWebResponse)request.GetResponse();
            if (respuesta.StatusCode == HttpStatusCode.Accepted || respuesta.StatusCode == HttpStatusCode.OK || respuesta.StatusCode == HttpStatusCode.Created)
            {
                StreamReader read = new StreamReader(respuesta.GetResponseStream());
                String result = read.ReadToEnd();
                read.Close();
                respuesta.Close();
                dynamic stuff = JsonConvert.DeserializeObject(result);

                return stuff;
            }
            else
            {
                throw new Exception("Ocurrio un error al obtener la respuesta del servidor: " + respuesta.StatusCode);
            }
        }


    }
    public class PushMessage
    {
        private string _to;
        private PushMessageData _notification;

        private dynamic _data;
        private dynamic _click_action;
        public dynamic data
        {
            get { return _data; }
            set { _data = value; }
        }

        public string to
        {
            get { return _to; }
            set { _to = value; }
        }
        public PushMessageData notification
        {
            get { return _notification; }
            set { _notification = value; }
        }

        public dynamic click_action
        {
            get
            {
                return _click_action;
            }

            set
            {
                _click_action = value;
            }
        }
    }

    public class PushMessageData
    {
        private string _title;
        private string _text;
        private string _sound = "default";
        //private dynamic _content_available;
        private string _click_action;
        public string sound
        {
            get { return _sound; }
            set { _sound = value; }
        }

        public string title
        {
            get { return _title; }
            set { _title = value; }
        }
        public string text
        {
            get { return _text; }
            set { _text = value; }
        }

        public string click_action
        {
            get
            {
                return _click_action;
            }

            set
            {
                _click_action = value;
            }
        }
    }
}

9
задан Vertexwahn 4 March 2016 в 15:53
поделиться

11 ответов

Если Вы надеетесь делать передачи файлов, XMLRPC вероятен плохой выбор. Это потребует, чтобы Вы закодировали все свои данные как XML (и загрузите его в память).

"Запросы данных" и "передачи файлов" много походят на простой HTTP мне, но Ваш оператор проблемы не ясно дает понять Ваши требования. Какая информация должна быть закодирована в запросе? URL хотел бы "http://yourserver.example.com/service/request?color=yellow&flavor=banana" быть достаточно хорошим?

Существует много клиентов и серверов HTTP в Python, ни один из которых не является особенно большим, но все из которых я уверен, сделают задание для основных передач файлов. Можно сделать безопасность "нормальный" веб-путь, который должен использовать HTTPS и пароли, которые, вероятно, будут достаточны.

Если Вы хотите двухстороннюю связь затем, HTTP падает, и протокол как перспективный брокер (PB) Twisted или протокол асинхронной передачи сообщений (AMP) могли бы подойти Вам лучше. Эти протоколы, конечно, хорошо поддерживаются Скрученным.

9
ответ дан 4 December 2019 в 07:15
поделиться

ProtocolBuffers был выпущен Google как способ сериализировать данные очень компактным эффективным способом. У них есть поддержка C++, Java и Python. Я еще не использовал его, но рассмотрение источника, кажется, существует клиенты и серверы RPC для каждого языка.

Я лично использовал XML-RPC на нескольких проектах, и это всегда делало точно, на что я надеялся. Я обычно шел между C++, Java и Python. Я использую libxmlrpc в Python часто, потому что легко запомнить и ввести в интерактивном режиме, но это на самом деле намного медленнее, чем альтернатива pyxmlrpc.

PyAMF главным образом для RPC с клиентами Flash, но это - компактный формат RPC, который стоит посмотреть на также.

Когда у Вас есть Python на обоих концах, я не полагаю, что что-либо бьет Пиротехническое средство (Удаленные объекты Python.) Пиротехническое средство даже имеет "сервер имен", который позволяет сервисам объявить о своей доступности сети. Клиенты используют сервер имен для нахождения сервисов, в которых он нуждается, неважно, где они активны в конкретный момент. Это дает Вам свободное дублирование и способность переместить сервисы от одной машины до другого без любого времени простоя.

Для безопасности я туннелировал бы по SSH или использовал бы TLS или SSL на уровне соединения. Конечно, все эти опции являются по существу тем же, они просто испытывают различные затруднения установки.

7
ответ дан 4 December 2019 в 07:15
поделиться

Пиротехническое средство (Удаленные объекты Python) довольно умно, если весь Ваш сервер/клиенты будет в Python. Я использую XMPP много хотя, так как я общаюсь с хостами, которые являются не всегда Python. XMPP предоставляет себя тому, чтобы быть расширенным довольно легко также.

Существует превосходная библиотека XMPP для Python под названием PyXMPP, который довольно актуален и не имеет никакой зависимости от Скрученного.

5
ответ дан 4 December 2019 в 07:15
поделиться

HTTP, кажется, удовлетворяет Вашим требованиям и очень хорошо поддерживается в Python.

Скрученный хорошо для серьезного асинхронного сетевого программирования в Python, но это имеет крутую кривую обучения, таким образом, могло бы стоить использовать что-то более простое, если Вы не будете знать, что Ваша система должна будет обработать большой параллелизм.

Для запуска я предложил бы использовать urllib для клиента и сервиса WSGI позади Apache для сервера. Apache может быть настроен для контакта с HTTPS справедливо просто.

3
ответ дан 4 December 2019 в 07:15
поделиться

Я предлагаю, чтобы Вы посмотрели 1. XMLRPC 2. JSONRPC 3. SOAP 4. REST/ATOM XMLRPC является допустимым выбором. Не волнуйтесь, что это слишком старо. Это не проблема. Это столь просто что мало необходимого изменения начиная с исходной спецификации. Про - то, что на каждом языке программирования я знаю, что существует библиотека для клиента, чтобы быть записанной в. Конечно, для Python. Я заставил его работать с mod_python и не имел никакой проблемы вообще. Большой проблемой с ним является свое многословие. Для простых значений существует много XML наверху. Вы можете gzip это причины, но затем Вы освобождаете некоторую способность к отладке с инструментами как Скрипач.

Мое персональное предпочтение является JSONRPC. Это имеет все преимущества XMLRPC, и это очень компактно. Далее, клиенты JavaScript могут "оценка" это так, никакой парсинг не необходим. Большинство из них создается для версии 1.0 стандарта. Я видел разнообразные попытки изменить к лучшему его, звонил 1.1 1.2 и 2.0, но они не создаются один сверху другого и, к моему знанию, еще широко не поддерживаются. 2,0 взгляда лучшее, но я все еще придерживался бы с 1,0 на данный момент (октябрь 2008)

Третьим кандидатом был бы REST/ATOM. REST является принципом, и ATOM - то, как Вы передаете объем данных, когда это должно для POST, ПОМЕЩЕННЫХ запросов и ПОЛУЧИТЬ ответы. Для очень хорошей реализации его посмотрите на GData, API Google. Реальный реальный хороший.

SOAP стар, и партии много библиотек / языки поддерживают его. IT тяжел и сложен, но если Вашими основными клиентами является.NET или Java, это могло бы стоить беспокойства. Visual Studio импортировала бы Ваш файл WSDL и создала бы обертку, и программисту C# это будет похоже на локальный блок действительно.

Хорошая вещь обо всем этом, то, что при проектировании решения, правильные, существующие библиотеки для Python позволили бы Вам, поддерживают более затем один почти ни с какими издержками. XMLRPC и JSONRPC являются особенно хорошим соответствием.

Относительно аутентификации. XMLRPC и JSONRPC не потрудились определять тот. Это - независимая вещь от сериализации. Таким образом, можно реализовать Стандартную аутентификацию, Дайджест-аутентификацию или собственное с любым из тех. Я видел несколько примеров клиентской Дайджест-аутентификации для Python, но должен все же видеть, что сервер основывал тот. При использовании Apache Вам, возможно, не понадобилось бы один, с помощью mod_auth_digest модуль Apache вместо этого. Это расцепляет по природе Вашего приложения

Транспортная безопасность. Это - obvously SSL (HTTPS). Я не могу в настоящее время помнить, как XMLRPC имеет дело с, но с реализацией JSONRPC, что у меня есть он, тривиально - Вы просто изменяете http на https в Ваших URL к JSONRPC, и это должно пробегаться через включенный транспорт SSL.

4
ответ дан 4 December 2019 в 07:15
поделиться

SSH может быть хорошим выбором для передачи файлов и дистанционного управления, особенно если Вы обеспокоены безопасным входом в систему. Большинство серверов Linux и Соляриса уже выполнит сервис SSH для администрирования, поэтому если Ваше использование программы Python ssh затем Вы не должны будете открывать дополнительные порты или сервисы на удаленные машины.

OpenSSH является стандартным и портативным клиентом и сервером SSH и может использоваться через подпроцессы из Python. Если Вы хотите больше Скрученной гибкости, включает Скрученную Раковину, которая является реализацией клиента и сервера SSH, которая обеспечивает гибкое программируемое управление стека SSH, и на Linux и на Windows. Я использую обоих в производстве.

2
ответ дан 4 December 2019 в 07:15
поделиться

Нет никакой потребности использовать HTTP (действительно, HTTP не хорош для RPC в целом в некотором отношении), и никакая потребность использовать основанный на стандартах протокол, если Вы говорите о клиенте Python, говорящем с сервером Python.

Пользуйтесь определенной для Python библиотекой RPC, такой как Пиротехническое средство, или что Скрученный обеспечивает (Twisted.spread).

1
ответ дан 4 December 2019 в 07:15
поделиться

Я использовал бы http и запустил бы с понимания, что предлагает библиотека Python.

Затем я перешел бы на более промышленную библиотеку Twisted силы.

1
ответ дан 4 December 2019 в 07:15
поделиться

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

Выполните его по https и добавьте имя пользователя/параметр пароля ко всем вызовам, и Вы будете иметь в распоряжении простую безопасность. Не уверенный в том, как легкий это должно проверить сертификат сервера в Python, все же.

Однако при передаче больших объемов данных кодирование в XML могло бы стать узким местом, так использование вдохновленной REST архитектуры по https может быть столь же хорошим как xmlrpclib.

0
ответ дан 4 December 2019 в 07:15
поделиться

Проект экономии Facebook может быть хорошим ответом. Это использует легкий протокол для раздавания объекта и позволяет Вам использовать любой язык, которого Вы желаете. Это может упасть на безопасность, хотя, как я полагаю, нет ни одного.

0
ответ дан 4 December 2019 в 07:15
поделиться

В поле RPC Json-RPC принесет большое повышение производительности по xml-rpc: http://json-rpc.org/wiki/python-json-rpc

-1
ответ дан 4 December 2019 в 07:15
поделиться
Другие вопросы по тегам:

Похожие вопросы: