-
Notifications
You must be signed in to change notification settings - Fork 135
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Что отправляется в сокет? #189
Comments
Добрый день! |
Второй сокет на порту 34131 вещает в эфир отдельно от первого данные-коллбеки функций On.... |
Wireshark-ом отловили формат посылаемого на порт 34130 сообщения. Например такого |
Второй вариант - оттрейсить в Visual Studio, что посылается в за-json-ненном Message из c# файлов и повторить на питоне с точностью до две кавычки-одна кавычка-апостроф |
Я тоже думал об этом, придется повторить (написать заново) питон оболочку. Может пока прописать какие шаги необходимо сделать для выполнения той или иной операции с точки зрения протокола qlua. Например получения массива о цене покупки и продажи (стакан) и т.д. |
Сервер поддерживает только один клиент. Может вы сначала подключаетесь из C#, а потом из Питона. Второе соединение не пройдет. А вообще посылаются простые JSON сообщения. Была идея сделать формальный JSON-RPC протокол, но не стал парится с формальностями так как по сути тут своя вариация той же самой идеи. Папаметры посылаются во многих местых через | символ. |
Клиент питон коннектится на порт 34130, посылает сообщение json {"data":"Ping","id":1,"cmd":"ping","t":0}, ждет пока не отключить. в ответ по тому же порту 34130 не приходит ожидаемое сообщение Pong |
Понятно, это было написано изначально. Но он должен коннектиться первым и единственным к скрипту QLua, если до этого что-то другое коннектилось, оно должно отсоединиться. |
Вставка в qsutils.lua в функцию function receiveRequest() вариантов дебуга типа PrintDbgStr("PrintDbgStr_requestString: " .. requestString) для просмотра в debugview или log(requestString) не дает никаких результатов. - т.е. сокет сервер никак не реагирует на полученное сообщение "Ping" и кажется не получает "Ping" |
Со стороны клиента все без проблем доходит до пункта получения response от сервера. |
Формат сообщения для дебажной функции Ping правильный? {"data":"Ping","id":1,"cmd":"ping","t":0} |
Смотрите код, я не помню точно, возможно там еще нужен символ конца строки |
request = {"data":"Ping","id":1,"cmd":"ping","t":0} |
"\n" в request: Надо вывести читалкой сокетов что в сокет приходит реально |
Wireshark при + "\r\n" или + "\n" или + "\r\n\r\n" |
Так тоже тишина от сокет сервера |
Я не пойму - код у вас под рукой, там всё есть. Зачем гадать, если можно посмотреть? Я не трогал протокол в сокете с 2014 года, но помню что это самое примитивное что может быть - JSON по строкам. |
qsutils.lua - не находится, чего не хватает в посылаемом клиентом сообщении function from_json(str) |
Все варианты перепробованы. Сокет сервер молчалив. |
Сообщения, сформированные C# Newtonsoft.Json сокет сервер распознает. Сообщения, сформированные python json сокет сервер не распознает. |
Надо пройти весь путь инициализации. |
Поставлю Visual Studio, отдебажу что отсылает C# сокет клиент и повторю на питон сокет клиенте. |
Работающий вариант Quik Qlua + python вот https://github.com/Enfernuz/quik-lua-rpc |
Да что то сложно все там. |
Там сложновато, если использовать protobuf, а если исользовать json, то все просто Enfernuz/quik-lua-rpc#17 Enfernuz commented on 2 Feb В ветке master теперь лежит альфа-версия с поддержкой JSON. import zmq |
Чтобы quiksharp qlua socket server отозвался на сообщение от питон сокет клиента есть подозрение про необходимость форматирования json как в Serialization.cs |
В quik-lua-rpc не забудьте в config.json прописать "serde_protocol": "json" вместо "serde_protocol": "protobuf" и все заработает с пол-оборота. Предлагаю quik-lua-rpc обсуждать там Enfernuz/quik-lua-rpc#17 |
Глухо. Нет опыта и в Visual Studio не получается отловить что c# сокет клиент шлет qlua сокет серверу |
В отсылаемых c# сокет клиентом сообщениях нет ничего необычного. Обычный json. Чего же не хватает qlua socket серверу при отсылке точно таких же сообщений из python socket клиента? |
Я же Вам говорю, надо сначала проиницилизировать протокол. Вы запускали QuikSharpDemo.exe?! Он там запускается, туда - сюда, id всякие - и только потом команды пользователя выполнить можно. Вы логику работы QuikSharpDemo.exe реализуйте - тогда и сервер будет отвечать. А я так тоже команды посылал в открытый порт - никакой реакции. |
В QuikSharpDemo не видно каких-нибудь доп действий, видны шаги |
quiksharp socket server не реагирует на сообщения, сформированные и отправленные ни в Python 3.7 ни в Python 2.7 |
В QuikSharpDemo после установки коннекта ничего особенного не наблюдается, просто отысылаются сообщения |
Congratulations! You are Winner! |
Теперь можно менять на первой странице в описании: |
Я автор, но даже мне пришлось посмотреть код.
Присылайте pull request -ы, в отдельной папке можно общими усилиями сделать Питон клиента. |
Просьба в readme добавить это условие для возможности работы любого сокет клиента на любом языке. |
Ну так Вы пришлите PR с этими изменениями. Папку можно сделать |
На Смартлабе обьявите плз стыковку Quik - Python - там многие давно этого ждут |
Это не стыковка, это примитивный посыл пинга и получение ответа. Вот когда будут все структуры данных и вся API в Питоне, тогда можно что-то заявлять. И пожалуйсте не говорите, что другим делать, в open source. Делайте сами или наймите кого-то. В open source не далют что-то для вас, а делают вместе, если нескольким людям нужно одно и то же. |
@euvgub, вы еще работаете над этим (API в Python)? |
Не имеет смысла тратить время на отлов глюков Quik. |
Спасибо за ссылки! |
Плюс существуют Тинькофф Инвестиции OpenApi и Exante Market Data & Trade API без нужды использовать Quik и Metatrader и им подобные |
покажите пожалуйста, что отправляется в сокет?
Вопрос не имеет отношения к языку программирования. Вместо сокет клиента на питоне может быть сокет клиент на любом другом языке. Суть вопроса о структуре данных, отсылаемых в request.
Wireshark показывает, что в qlua socket server приходит, например такое {"data":"","id":269,"cmd":"isConnected","t":1555400409924}
При отсылании точно такого же с помощью python socket клиента - сервер в ответ ничего не присылает, sock.recv - empty
Что должен отсылать python socket client, чтобы получать response от quiksharp?
import json
import socket
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server_address = ('127.0.0.1', 34130)
sock.connect(server_address)
a_dict = b'{"data":"","id":269,"cmd":"isConnected","t":1555400409924}'
serialized_dict = json.dumps(a_dict)
sock.sendall(serialized_dict)
while(True):
data = sock.recv(1024)
print(data)
The text was updated successfully, but these errors were encountered: