Вверх ↑
Этот топик читают: Гость
Ответов: 316
Рейтинг: 21
#1: 2018-08-13 15:55:39 ЛС | профиль | цитата
Разбираюсь с вебсокетами, охота поднять их на элементах
По этому примеру https://habr.com/post/79038/ подключился к серверу - echo.websocket.org
Сейчас не получается реализовать строку - 0x00, ‹строка в кодировке UTF-8›, 0xFF
Хочу получить что-то наподобие https://www.websocket.org/echo.html

Кто-то знает как это можно реализовать?

Add(MainForm,2953706,511,133)
{
Width=561
Height=455
Caption="WebSocket"
BorderStyle=3
Position=1
}
Add(RichEdit,13410615,798,133)
{
Top=34
Width=555
Height=389
Align=5
ScrollBars=3
}
Add(ChildPanel,13373125,728,133)
{
link(onEvent1,13410615:doAdd,[])
link(onEvent2,13410615:doClear,[])
}
BEGIN_SDK
Add(EditMulti,13386744,371,224)
{
EventCount=2
WorkCount=1
Width=475
Height=102
link(doWork1,1965081:doWork2,[(575,230)(575,279)])
}
Add(Panel,14885927,420,238)
{
Width=555
Height=34
Align=2
BorderWidth=0
BevelInner=0
BevelWidth=0
}
Add(TCP_Client,2520033,686,259)
{
Port=80
IP="174.129.224.73"
link(onRead,13386744:onEvent1,[(735,265)(735,230)])
link(onConnect,13375140:doOn,[(732,272)(732,279)])
link(onDisconnect,13375140:doOff,[(732,279)(732,272)])
}
Add(FormatStr,851539,637,231)
{
Mask="GET / HTTP/1.1\r\nUpgrade: WebSocket\r\nConnection: Upgrade\r\nHost: echo.websocket.org\r\nOrigin: wss://echo.websocket.org\r\n\r\n"
link(onFString,1965081:doWork1,[(677,237)])
}
Add(Hub,2475254,602,259)
{
link(onEvent1,2520033:doOpen,[])
link(onEvent2,851539:doString,[(623,272)(623,237)])
}
Add(LED,13375140,756,259)
{
Left=120
Top=12
Width=10
Height=10
Shape=1
Blick=1
ColorOn=65280
ColorOff=8421504
ColorBlick=32768
}
Add(IndexToChanel,4701145,539,280)
{
link(onEvent1,14335319:doEvent1,[])
link(onEvent2,2475254:doEvent1,[(587,293)(587,265)])
}
Add(CheckBox,7990354,490,280)
{
Left=15
Top=7
Width=100
Caption="Подключиться"
link(onCheck,4701145:doEvent,[])
}
Add(Timer,7552431,420,280)
{
AutoStop=1
link(onTimer,7990354:doCheck,[])
}
Add(Hub,14335319,595,280)
{
link(onEvent1,2520033:doClose,[(647,286)(647,272)])
link(onEvent2,13386744:onEvent2,[(831,293)(831,237)])
}
Add(HubEx,1965081,673,273)
{
link(onEvent,2520033:doSend,[])
}
END_SDK
Add(ChildPanel,2740132,553,133)
{
link(onEvent1,8358243:doStrCat,[])
}
BEGIN_SDK
Add(EditMulti,12409966,21,21)
{
EventCount=1
Width=440
Height=298
}
Add(Panel,6157873,35,63)
{
Left=35
Top=105
Width=564
Height=34
Align=4
BorderWidth=0
BevelInner=0
BevelWidth=0
}
Add(Button,4577816,28,196)
{
Left=4
Top=6
Width=115
Caption="Отправка"
link(onClick,14267661:doData,[])
}
Add(Edit,14472800,308,140)
{
Left=125
Top=6
Width=425
Text="Test"
}
Add(DoData,14267661,308,196)
{
link(onEventData,12409966:onEvent1,[(400,202)(400,27)])
link(Data,14472800:Text,[])
}
END_SDK
Add(StrCat,13811691,665,133)
{
Str2="0хFF"
link(onStrCat,13373125:doWork1,[])
}
Add(StrCat,8358243,609,133)
{
Str1="0х00"
link(onStrCat,13811691:doStrCat,[])
}

Редактировалось 1 раз(а), последний 2018-08-14 17:42:49
карма: 1

0
Ответов: 1821
Рейтинг: 168
#2: 2018-08-13 19:49:36 ЛС | профиль | цитата
Нужно отправлять 0x00 и 0xFF не в строковом виде, а в бинарном.

Вообще, хотел сразу схему поправить, но нашёл особенность TCP_Client: при DataType=dtStream перед данными отправляет их длину и, исходя из исходников, отключение такого поведения сейчас не предусмотрено.

Схемы выкладываем в тегах code.

Редактировалось 1 раз(а), последний 2018-08-13 20:04:29
карма: 5

0
Ответов: 316
Рейтинг: 21
#3: 2018-08-14 12:19:51 ЛС | профиль | цитата
Получилось отправить так -

Add(StrCat,13811691,693,210)
{
Str2="0хFF"
link(Str2,519261:Var,[(706,202)(692,202)])
}
Add(Hub,7503805,553,182)
{
link(onEvent1,11235758:doConvert,[(609,188)(609,167)])
link(onEvent2,5895986:doStrCat,[(602,195)(602,216)])
}
Add(Memory,3577880,637,112)
{
Default=Integer(0)
}
Add(ConvertorEx,519261,686,161)
{
Mode=4
Digits=1
link(Data,6065481:Value,[(692,153)(699,153)])
}
Add(Memory,6065481,693,112)
{
Default=Integer(255)
}
Add(StrCat,5895986,637,210)
{
link(onStrCat,13811691:doStrCat,[])
link(Str1,11235758:Var,[])
}
Add(ConvertorEx,11235758,637,161)
{
Mode=4
Digits=1
link(onResult,519261:doConvert,[])
link(Data,3577880:Value,[])
}

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

Редактировалось 2 раз(а), последний 2018-08-14 17:43:22
карма: 1

0
Ответов: 1821
Рейтинг: 168
#4: 2018-08-14 13:09:15 ЛС | профиль | цитата
LastLeader, пробовал отправлять данные в бинарном режиме 0x80 - эхо приходило
карма: 5

0
Ответов: 316
Рейтинг: 21
#5: 2018-08-14 17:20:10 ЛС | профиль | цитата
Схему можешь выложить?
карма: 1

0
Ответов: 16884
Рейтинг: 1240
#6: 2018-08-14 17:31:31 ЛС | профиль | цитата
LastLeader, читать тоже не вредно...
sаmakacd писал(а):
Схемы выкладываем в тегах code.


Редактировалось 2 раз(а), последний 2018-08-14 17:32:23
карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
Ответов: 316
Рейтинг: 21
#7: 2018-08-14 17:44:53 ЛС | профиль | цитата
Не заметил того сообщения
Add(MainForm,2953706,343,133)
{
Width=561
Height=455
Caption="WebSocket"
BorderStyle=3
Position=1
}
Add(RichEdit,13410615,434,182)
{
Top=34
Width=555
Height=389
Align=5
ScrollBars=3
}
Add(ChildPanel,13373125,385,182)
{
link(onEvent1,13410615:doAdd,[])
link(onEvent2,13410615:doClear,[])
}
BEGIN_SDK
Add(EditMulti,13386744,371,224)
{
EventCount=2
WorkCount=1
Width=517
Height=158
link(doWork1,7314874:doEvent1,[(385,230)(385,251)])
}
Add(Panel,14885927,490,238)
{
Width=555
Height=34
Align=2
BorderWidth=0
BevelInner=0
BevelWidth=0
}
Add(TCP_Client,2520033,686,259)
{
Port=80
IP="174.129.224.73"
link(onRead,11188231:doEvent1,[(744,265)(744,230)])
link(onConnect,13375140:doOn,[(732,272)(732,279)])
link(onDisconnect,13375140:doOff,[(732,279)(732,272)])
}
Add(FormatStr,851539,637,231)
{
Mask="GET / HTTP/1.1\r\nUpgrade: WebSocket\r\nConnection: Upgrade\r\nHost: echo.websocket.org\r\nOrigin: ws://echo.websocket.org\r\n\r\n"
link(onFString,1965081:doWork1,[(676,237)])
}
Add(Hub,2475254,602,259)
{
link(onEvent1,2520033:doOpen,[])
link(onEvent2,851539:doString,[(623,272)(623,237)])
}
Add(LED,13375140,756,259)
{
Left=120
Top=12
Width=10
Height=10
Shape=1
Blick=1
ColorOn=65280
ColorOff=8421504
ColorBlick=32768
}
Add(IndexToChanel,4701145,539,280)
{
link(onEvent1,14335319:doEvent1,[])
link(onEvent2,2475254:doEvent1,[(587,293)(587,265)])
}
Add(CheckBox,7990354,490,280)
{
Left=15
Top=7
Width=100
Caption="Подключиться"
link(onCheck,4701145:doEvent,[])
}
Add(Timer,7552431,441,280)
{
AutoStop=1
link(onTimer,7990354:doCheck,[])
}
Add(Hub,14335319,595,280)
{
link(onEvent1,2520033:doClose,[(647,286)(647,272)])
link(onEvent2,13386744:onEvent2,[(858,293)(858,237)])
}
Add(HubEx,1965081,672,273)
{
link(onEvent,2520033:doSend,[])
}
Add(LED,4080142,805,231)
{
Left=500
Top=12
Width=10
Height=10
Shape=1
Blick=1
ColorOn=65280
ColorOff=8421504
ColorBlick=32768
}
Add(Hub,11188231,770,224)
{
link(onEvent1,13386744:onEvent1,[])
link(onEvent2,4080142:doChangeValue,[(798,237)(798,237)])
}
Add(Label,7330148,490,329)
{
Left=515
Top=10
Width=10
Height=17
Caption="0"
}
Add(Hub,7314874,399,245)
{
link(onEvent1,1965081:doWork2,[(543,251)(543,279)])
link(onEvent2,8722174:doLength,[(434,258)(434,335)])
}
Add(Length,8722174,441,329)
{
link(onLength,7330148:doText,[])
}
END_SDK
Add(ChildPanel,2740132,336,182)
{
link(onEvent1,13373125:doWork1,[])
}
BEGIN_SDK
Add(EditMulti,12409966,21,21)
{
EventCount=1
Width=958
Height=298
}
Add(Panel,6157873,35,63)
{
Left=35
Top=105
Width=564
Height=34
Align=4
BorderWidth=0
BevelInner=0
BevelWidth=0
}
Add(Button,4577816,28,196)
{
Left=4
Top=6
Width=115
Caption="Отправка"
link(onClick,14267661:doData,[])
}
Add(Edit,14472800,308,140)
{
Left=125
Top=6
Width=425
Text="Test"
}
Add(DoData,14267661,308,196)
{
link(onEventData,2713675:doCharset,[(418,202)(418,188)])
link(Data,14472800:Text,[])
}
Add(StrCat,13811691,693,210)
{
Str2="0хFF"
link(onStrCat,12409966:onEvent1,[(852,216)(852,27)])
link(Str2,519261:Var,[(706,202)(692,202)])
}
Add(Hub,7503805,553,182)
{
link(onEvent1,11235758:doConvert,[(609,188)(609,167)])
link(onEvent2,5895986:doStrCat,[(602,195)(602,216)])
}
Add(Memory,3577880,637,112)
{
Default=Integer(0)
}
Add(ConvertorEx,519261,686,161)
{
Mode=4
Digits=1
link(Data,6065481:Value,[(692,153)(699,153)])
}
Add(Memory,6065481,693,112)
{
Default=Integer(255)
}
Add(Charset,2713675,497,182)
{
Type=6
link(onCharset,7503805:doEvent1,[])
}
Add(StrCat,5895986,637,210)
{
link(onStrCat,13811691:doStrCat,[])
link(Str1,11235758:Var,[])
}
Add(ConvertorEx,11235758,637,161)
{
Mode=4
Digits=1
link(onResult,519261:doConvert,[])
link(Data,3577880:Value,[])
}
END_SDK


Редактировалось 1 раз(а), последний 2018-08-14 17:46:21
карма: 1

0
Ответов: 1821
Рейтинг: 168
#8: 2018-08-15 21:50:16 ЛС | профиль | цитата
LastLeader, ответ от сервера приходит в строковом режиме, когда он обёрнут в 0x00 и 0xFF. Возможно ошибаюсь, но выглядит, что визуальные элементы принимают нуль-терминальные строки, а так как ответ начинается с нулевого символа, то получается, что выводится пустая строка.


Add(ChildPanel,13373125,203,98)
{
link(onEvent1,13410615:doAdd,[])
link(onEvent2,13410615:doClear,[])
}
BEGIN_SDK
Add(EditMulti,13386744,189,154)
{
EventCount=2
WorkCount=1
Width=727
Height=263
link(doWork1,7314874:doEvent1,[(196,160)(196,188)])
}
Add(Panel,14885927,294,175)
{
Width=555
Height=34
Align=2
BorderWidth=0
BevelInner=0
BevelWidth=0
}
Add(TCP_Client,2520033,490,196)
{
Port=80
IP="174.129.224.73"
link(onRead,11188231:doEvent1,[])
link(onConnect,13375140:doOn,[(572,209)(572,223)])
link(onDisconnect,11025621:doEvent1,[])
}
Add(FormatStr,851539,441,168)
{
Mask="GET / HTTP/1.1\r\nUpgrade: WebSocket\r\nConnection: Upgrade\r\nHost: echo.websocket.org\r\nOrigin: ws://echo.websocket.org\r\n\r\n"
link(onFString,1965081:doWork1,[(480,174)])
}
Add(Hub,2475254,406,196)
{
link(onEvent1,2520033:doOpen,[])
link(onEvent2,851539:doString,[(427,209)(427,174)])
}
Add(LED,13375140,588,203)
{
Left=120
Top=12
Width=10
Height=10
Shape=1
Blick=1
ColorOn=65280
ColorOff=8421504
ColorBlick=32768
}
Add(IndexToChanel,4701145,343,217)
{
link(onEvent1,14335319:doEvent1,[])
link(onEvent2,2475254:doEvent1,[(391,230)(391,202)])
}
Add(CheckBox,7990354,294,217)
{
Left=15
Top=7
Width=100
Caption="Подключиться"
link(onCheck,4701145:doEvent,[])
}
Add(Timer,7552431,245,217)
{
AutoStop=1
link(onTimer,7990354:doCheck,[])
}
Add(Hub,14335319,399,217)
{
link(onEvent1,2520033:doClose,[(451,223)(451,209)])
link(onEvent2,13386744:onEvent2,[(477,230)(477,403)(886,403)(886,167)])
}
Add(HubEx,1965081,476,210)
{
link(onEvent,2520033:doSend,[])
}
Add(LED,4080142,735,196)
{
Left=500
Top=12
Width=10
Height=10
Shape=1
Blick=1
ColorOn=65280
ColorOff=8421504
ColorBlick=32768
}
Add(Hub,11188231,693,196)
{
OutCount=3
link(onEvent1,4080142:doChangeValue,[])
link(onEvent2,6517598:doCompare,[(721,209)(721,272)])
link(onEvent3,102705:doSwitch,[(715,216)(715,335)])
}
Add(Label,7330148,294,266)
{
Left=515
Top=10
Width=10
Height=17
Caption="0"
}
Add(Hub,7314874,203,182)
{
link(onEvent1,1965081:doWork2,[(347,188)(347,216)])
link(onEvent2,8722174:doLength,[(238,195)(238,272)])
}
Add(Length,8722174,245,266)
{
link(onLength,7330148:doText,[])
}
Add(Switch,102705,735,329)
{
DataOn=Integer(1)
DataOff=Integer(0)
Point(State)
Point(doOn)
}
Add(Hub,11025621,532,210)
{
link(onEvent1,13375140:doOff,[])
link(onEvent2,7125754:In,[(567,223)(567,251)])
}
Add(LineBreak,16561526,616,336)
{
Caption="setDisconnected"
link(Out,102705:doReset,[])
Primary=[7125754,-28,-91]
}
Add(LineBreakEx,8207542,735,378)
{
Caption="isConnected"
Type=3
link(_Data,102705:State,[])
}
Add(Delete,548636,784,266)
{
Count=1
link(onDelete,1380814:doDelete,[])
}
Add(Delete,1380814,833,266)
{
Count=1
Direction=1
link(onDelete,13287700:doWork2,[])
}
Add(If_else,6517598,735,266)
{
Op2=Integer(1)
link(onTrue,548636:doDelete,[])
link(onFalse,13287700:doWork3,[(776,279)(776,310)(877,310)])
link(Op1,5596692:getVar,[])
}
Add(LineBreakEx,5596692,735,238)
{
Caption="isConnected"
Type=2
}
Add(HubEx,13287700,873,266)
{
Angle=3
link(onEvent,13386744:onEvent1,[(877,160)])
}
END_SDK
Add(MainForm,10030285,161,49)
{
Width=561
Height=455
Caption="WebSocket"
BorderStyle=3
Position=1
}
Add(RichEdit,13410615,252,98)
{
Top=34
Width=555
Height=389
Align=5
ScrollBars=3
}
Add(ChildPanel,2740132,154,98)
{
link(onEvent1,13373125:doWork1,[])
}
BEGIN_SDK
Add(EditMulti,12409966,21,21)
{
EventCount=1
Width=958
Height=298
}
Add(Panel,6157873,35,63)
{
Left=35
Top=105
Width=564
Height=34
Align=4
BorderWidth=0
BevelInner=0
BevelWidth=0
}
Add(Button,4577816,28,196)
{
Left=4
Top=6
Width=115
Caption="Отправка"
link(onClick,14267661:doData,[])
}
Add(Edit,14472800,308,140)
{
Left=125
Top=6
Width=425
Text="Test"
}
Add(DoData,14267661,308,196)
{
link(onEventData,2713675:doCharset,[(418,202)(418,188)])
link(Data,14472800:Text,[])
}
Add(StrCat,13811691,693,210)
{
Str2="0хFF"
link(onStrCat,12409966:onEvent1,[(852,216)(852,27)])
link(Str2,519261:Var,[(706,202)(692,202)])
}
Add(Hub,7503805,553,182)
{
link(onEvent1,11235758:doConvert,[(609,188)(609,167)])
link(onEvent2,5895986:doStrCat,[(602,195)(602,216)])
}
Add(Memory,3577880,637,112)
{
Default=Integer(0)
}
Add(ConvertorEx,519261,686,161)
{
Mode=4
Digits=1
link(Data,6065481:Value,[(692,153)(699,153)])
}
Add(Memory,6065481,693,112)
{
Default=Integer(255)
}
Add(Charset,2713675,497,182)
{
Type=6
link(onCharset,7503805:doEvent1,[])
}
Add(StrCat,5895986,637,210)
{
link(onStrCat,13811691:doStrCat,[])
link(Str1,11235758:Var,[])
}
Add(ConvertorEx,11235758,637,161)
{
Mode=4
Digits=1
link(onResult,519261:doConvert,[])
link(Data,3577880:Value,[])
}
END_SDK
карма: 5

0
Ответов: 704
Рейтинг: 7
#9: 2019-03-17 20:25:05 ЛС | профиль | цитата
Можно ли для этих вебсокетов организовать сервер для виндовс-приложения? Отправляя со страницы получать в приложение. Сейчас подобное через tcp-сервер реализую и отправку простых http запросов ему со страницы.

Редактировалось 2 раз(а), последний 2019-03-18 21:16:50
карма: 0

0
Ответов: 197
Рейтинг: 2
#10: 2025-12-10 21:49:46 ЛС | профиль | цитата
Hiasm имеет встроенный JS элемент. Будет ли работать он с websocket?


ws = new WebSocket("ws://localhost:4455")
карма: 0

0
Ответов: 1093
Рейтинг: 223
#11: 2025-12-10 23:44:58 ЛС | профиль | цитата
lisnic писал(а):
Hiasm имеет встроенный JS элемент. Будет ли работать он с websocket?

Будет. Только код немного другой..

Add(MainForm,16417920,357,392)
{
Width=377
Height=217
Point(onClose)
link(onCreate,14084867:doString,[])
}
Add(Memo,6453024,518,406)
{
Width=361
Height=178
Align=5
AddType=1
ScrollBars=3
}
Add(VisualStrings,16770708,406,308)
{
Lines=#24:wss://echo.websocket.org|
Width=207
}
Add(VisualStrings,2968059,413,336)
{
Lines=#29:Hello, WebSocket Echo Server!|
Width=179
Height=25
}
Add(VBJScript,12976639,455,406)
{
WorkPoints=#11:##SetScript|
EventPoints=#9:onMessage|
Language=1
Script=#0:|0:|
UseName=0
link(onMessage,6453024:doAdd,[])
}
Add(FormatStr,14084867,406,406)
{
Mask="var document = new ActiveXObject('htmlfile');\r\ndocument.write('<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />');\r\nvar window = document.Script; \r\nvar WebSocket = window.WebSocket;\r\ndocument.close();\r\nvar url = '%1';\r\nvar ws = new WebSocket(url);\r\nws.onopen = function(event){ws.send('%2');}\r\nws.onmessage = function(event){sys.onMessage(event.data);}\r\nws.onerror = function(event){sys.onMessage('Web socket error !');}\r\nws.onclose = function(event){sys.onMessage('Web socket closed');}\r\n"
link(onFString,12976639:##SetScript,[])
link(Str1,16770708:Text,[])
link(Str2,2968059:Text,[])
}

карма: 20

0
Ответов: 1093
Рейтинг: 223
#12: 2025-12-14 07:59:49 ЛС | профиль | цитата
lisnic, Вот пример получения bnbbtc@ticker с публичного веб сокета крипто биржи binance
Запусти схему и немного подожди
Add(MainForm,16417920,252,245)
{
Width=766
Height=217
Point(onClose)
link(onCreate,13172879:doWork,[])
}
Add(Memo,6453024,364,259)
{
Width=750
Height=178
Align=5
AddType=1
ScrollBars=3
}
Add(VisualStrings,15578961,308,210)
{
Lines=#46:wss://stream.binance.com:9443/ws/bnbbtc@ticker|
Width=333
}
Add(VBJScript,13172879,308,259)
{
WorkPoints=#6:doWork|
EventPoints=#9:onMessage|
DataPoints=#5:wsurl|
Language=1
Script=#28:function doWork(data,index) |1:{|46: var document = new ActiveXObject('htmlfile');|84: document.write('<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />');|31: var window = document.Script; |34: var WebSocket = window.WebSocket;|18: document.close();|0:|35: var ws = new WebSocket(sys.wsurl);|0:|59: ws.onmessage = function(event){sys.onMessage(event.data);}|67: ws.onerror = function(event){sys.onMessage('Web socket error !');}|66: ws.onclose = function(event){sys.onMessage('Web socket closed');}|2: |3: } |
UseName=0
link(wsurl,15578961:Text,[])
link(onMessage,6453024:doAdd,[])
}


Редактировалось 1 раз(а), последний 2025-12-14 08:05:48
карма: 20

0
Ответов: 1093
Рейтинг: 223
#13: 2026-01-06 23:25:43 ЛС | профиль | цитата
Локальный websocket эхо сервер - https://forum.hiasm.com/getfile/40613
В архиве две схемы:
Схема локального websocket echo сервера
Схема websocket клиент
Сначала запускаем сервер, а потом клиент.

--- Добавлено в 2026-01-06 23:27:10

Локальный websocket эхо сервер на стандартных компонентах - https://forum.hiasm.com/getfile/40614
Также сначала запускаем сервер, а потом клиента

--- Добавлено в 2026-01-06 23:28:19

Тестовая схема для запроса локального websocket из HTML станицы
https://forum.hiasm.com/getfile/40615

Редактировалось 4 раз(а), последний 2026-01-06 23:28:40
карма: 20

0
файлы: 3Local websocket echo server.zip [5.1KB] [255], WebSocket сервер на элементах.zip [5.7KB] [244], WebSocket сервер plus HTML.zip [25.3KB] [261]
Ответов: 1093
Рейтинг: 223
#14: 2026-05-05 13:34:03 ЛС | профиль | цитата
В архиве две схемы
1. Локальный websocket сервер. Handshake, расшифровку и кодирование фреймов поместил в один InlineCode.
2. Схема websocket клиента. Простая HTML страница сделана в пакете WEB.
Сначала запускаем сервер, а потом открываем страницу. В противном случае обновите станицу в браузере после запуска websocket сервер.
https://forum.hiasm.com/getfile/40624

Стандарт
https://datatracker.ietf.org/doc/html/rfc6455
RFC 6455 — это официальный стандарт IETF от декабря 2011 года, определяющий протокол WebSocket. Он обеспечивает полнодуплексный (двусторонний) обмен данными между клиентом (обычно браузером) и сервером через постоянное TCP-соединение, оптимизируя передачу сообщений.Ключевые аспекты RFC 6455:
Рукопожатие (Handshake): Устанавливается через HTTP-запрос, который переключает протокол на WebSocket.
Фреймы (Framing): Документ описывает структуру фреймов для эффективной передачи данных.
Совместимость: Поддерживается всеми современными браузерами (Chrome, Firefox, Safari, Edge).
Безопасность: Разработан для работы из ненадежных сред (браузеров) к удаленным хостам.RFC 6455 является основой для реализации серверов и клиентов WebSocket во многих языках программирования.
карма: 20

0
файлы: 1local_websocket_server_html.zip [4.6KB] [6]
Ответов: 1093
Рейтинг: 223
#15: 2026-05-05 19:16:22 ЛС | профиль | цитата
Схема подключения к публичному websocket серверу и подписка на стримы(tickers) криптобиржи binance
BTCUSDT (Bitcoin)
ETHUSDT (Ethereum)
SOLUSDT (Solana)
BNBUSDT (Binance Coin)
XRPUSDT (Ripple)
DOGEUSDT (Dogecoin)
ADAUSDT (Cardano)
PEPEUSDT (Pepe)
TRXUSDT (Tron)
SUIUSDT (Sui)
Add(MainForm,2953706,35,133)
{
Width=705
Height=342
Caption="WebSocket Streams for Binance"
link(onCreate,14240552:doEnum,[])
}
Add(Hub,8409842,336,210)
{
link(onEvent1,2088531:doSplit,[(361,216)(361,174)])
link(onEvent2,9208792:doEnum,[])
}
Add(MultiStrData,2088531,378,168)
{
Count=1
link(onPart1,16324226:doGetIndex,[])
}
Add(StrList,16324226,434,133)
{
FileName="1.txt"
Strings=#7:BTCUSDT|7:ETHUSDT|7:SOLUSDT|7:BNBUSDT|7:XRPUSDT|8:DOGEUSDT|7:ADAUSDT|8:PEPEUSDT|7:TRXUSDT|7:SUIUSDT|
Point(onGetIndex)
Point(Index)
Point(doGetString)
Point(onGetString)
Point(doGetIndex)
}
Add(DocumentTemplate,3449277,490,259)
{
X=20
Y=20
Name="doc"
link(Bitmap,13572165:Bitmap,[(496,250)(482,250)(482,299)(447,299)])
}
BEGIN_SDK
Add(Print_Table,8755987,-3,-3)
{
Name="table"
Width=644
Height=1000
Columns=#12:Symbol|150|0|18:Price change|100|2|26:Price change percent|150|1|16:Last price|100|2|19:Last quantity|100|2|0:|
RowHeight=25
TableTrans=0
TBorderStyle=5
HeadFont=[Lucida Console,12,0,0,204]
CellFont=[Lucida Console,10,0,0,204]
Cells=#17:BTCUSDT (Bitcoin)|18:ETHUSDT (Ethereum)|16:SOLUSDT (Solana)|22:BNBUSDT (Binance Coin)|16:XRPUSDT (Ripple)|19:DOGEUSDT (Dogecoin)|17:ADAUSDT (Cardano)|15:PEPEUSDT (Pepe)|14:TRXUSDT (Tron)|13:SUIUSDT (Sui)|
CellTrans=0
Left=5
Top=3
Right=5
Bottom=3
}
END_SDK
Add(PC_TableSetCell,1103495,441,217)
{
ItemName="table"
Document="doc"
link(Col,9208792:NumSubStr,[(454,208)(433,208)(433,257)(384,257)])
link(Row,16324226:Index,[])
}
Add(PaintBox,13572165,441,259)
{
Width=689
Height=303
Align=5
Color=16777215
Layout="horz"
WidthScale=100
HeightScale=100
ClearBeforeDraw=0
link(onBeforeDraw,3449277:doDraw,[])
}
Add(Str_Enum,9208792,378,217)
{
link(onEnum,1103495:doText,[])
link(onEndEnum,13572165:doRefresh,[(417,230)(417,265)])
link(String,2088531:RemaindStr,[])
}
Add(VBJScript,13172879,238,210)
{
WorkPoints=#6:doWork|
EventPoints=#9:onMessage|
DataPoints=#5:wsurl|
Language=1
Script=#28:function doWork(data,index) |1:{|46: var document = new ActiveXObject('htmlfile');|84: document.write('<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />');|31: var window = document.Script; |34: var WebSocket = window.WebSocket;|18: document.close();|0:|30: var ws = new WebSocket(data);|0:|59: ws.onmessage = function(event){sys.onMessage(event.data);}|67: ws.onerror = function(event){sys.onMessage('Web socket error !');}|66: ws.onclose = function(event){sys.onMessage('Web socket closed');}|2: |3: } |
UseName=0
link(onMessage,16146007:doWork,[])
}
Add(StrList,2215222,77,91)
{
Strings=#7:btcusdt|7:ethusdt|7:solusdt|7:bnbusdt|7:xrpusdt|8:dogeusdt|7:adausdt|8:pepeusdt|7:trxusdt|7:suiusdt|
}
Add(ArrayEnum,14240552,91,147)
{
link(onItem,12082631:doStrCat,[])
link(onEndEnum,4819636:doStrCat,[(130,160)(130,216)])
link(Array,2215222:Array,[])
}
Add(StrCat,12082631,140,147)
{
Str2="@ticker"
link(onStrCat,4604245:doStrCatDlm,[])
}
Add(StrCatDelim,4604245,196,147)
{
Delimiter="/"
link(Str1,7291443:Var1,[(202,138)(188,138)(188,187)])
}
Add(StrCat,4819636,189,210)
{
Str1="wss://stream.binance.com:9443/ws"
link(onStrCat,13172879:doWork,[])
link(Str2,7291443:Var2,[])
}
Add(GetDataEx,7291443,196,182)
{
link(Data,4604245:Result,[])
}
Add(VisualStrings,2806499,581,21)
{
Lines=#1:{|41: "e": "24hrTicker", // Event type|41: "E": 1672515782136, // Event time|37: "s": "BNBBTC", // Symbol|43: "p": "0.0015", // Price change|51: "P": "250.00", // Price change percent|53: "w": "0.0018", // Weighted average price|98: "x": "0.0009", // First trade(F)-1 price (first trade before the 24hr rolling window)|41: "c": "0.0025", // Last price|44: "Q": "10", // Last quantity|45: "b": "0.0024", // Best bid price|48: "B": "10", // Best bid quantity|45: "a": "0.0026", // Best ask price|48: "A": "100", // Best ask quantity|41: "o": "0.0010", // Open price|41: "h": "0.0025", // High price|40: "l": "0.0010", // Low price|61: "v": "10000", // Total traded base asset volume|62: "q": "18", // Total traded quote asset volume|51: "O": 0, // Statistics open time|52: "C": 86400000, // Statistics close time|45: "F": 0, // First trade ID|44: "L": 18150, // Last trade Id|53: "n": 18151 // Total number of trades|1:}|
Width=431
Height=333
}
Add(VBJScript,16146007,287,210)
{
WorkPoints=#6:doWork|
EventPoints=#7:onEvent|
Language=1
Script=#28:function doWork(data,index) |1:{|38: var ticker = eval("(" + data+ ")");|123: //sys.onEvent(ticker.E +";" + ticker.s +";" + ticker.c +";" + ticker.P +";" + ticker.s +";" + ticker.s +";" + ticker.s);|89: sys.onEvent(ticker.s +";" + ticker.p +";" + ticker.P +";" + ticker.c +";" + ticker.Q);|2:} |
UseName=0
link(onEvent,8409842:doEvent1,[])
}


Запустите схему и немного подождите.
Документация - https://developers.binance.com/docs/binance-spot-api-docs/web-socket-streams

Редактировалось 2 раз(а), последний 2026-05-05 19:46:11
карма: 20

0
15
Сообщение
...
Прикрепленные файлы
(файлы не залиты)