debug websocket

This commit is contained in:
Thomas Farstrike
2025-05-19 21:19:01 +02:00
parent 26fce3b874
commit a85d4a72a3
7 changed files with 299 additions and 15 deletions
+29
View File
@@ -0,0 +1,29 @@
# for micropython compatibility
class UserList:
def __init__(self, initlist=None):
self.data = list(initlist) if initlist is not None else []
# Support basic list operations
def __getitem__(self, index):
return self.data[index]
def __setitem__(self, index, value):
self.data[index] = value
def __len__(self):
return len(self.data)
def __iter__(self):
return iter(self.data)
def append(self, item):
self.data.append(item)
def extend(self, other):
self.data.extend(other)
def __repr__(self):
return f"{self.__class__.__name__}({self.data!r})"
+6 -2
View File
@@ -147,8 +147,9 @@ class WebSocketApp:
while self.running and self.ping_interval: while self.running and self.ping_interval:
self.last_ping_tm = time.time() self.last_ping_tm = time.time()
try: try:
await self.ws.send_bytes(self.ping_payload.encode() if isinstance(self.ping_payload, str) else self.ping_payload)
_log_debug("Sending ping") #await self.ws.send_bytes(self.ping_payload.encode() if isinstance(self.ping_payload, str) else self.ping_payload)
_log_debug("NOT Sending ping because it seems corrupt")
except Exception as e: except Exception as e:
_log_debug(f"Failed to send ping: {e}") _log_debug(f"Failed to send ping: {e}")
await asyncio.sleep(self.ping_interval) await asyncio.sleep(self.ping_interval)
@@ -219,6 +220,8 @@ class WebSocketApp:
reconnect = reconnect reconnect = reconnect
while self.running: while self.running:
print("self.running")
time.sleep(1)
try: try:
await self._connect_and_run() await self._connect_and_run()
except Exception as e: except Exception as e:
@@ -253,6 +256,7 @@ class WebSocketApp:
self._start_ping_thread() self._start_ping_thread()
async for msg in ws: async for msg in ws:
print(f"received msg: {msg.type} - {msg.data}")
if not self.running: if not self.running:
break break
@@ -0,0 +1,51 @@
import json
import ssl
import time
from nostr.filter import Filter, Filters
from nostr.event import Event, EventKind
from nostr.relay_manager import RelayManager
from nostr.message_type import ClientMessageType
#filters = Filters([Filter(authors=[<a nostr pubkey in hex>], kinds=[EventKind.TEXT_NOTE])])
#filters = Filters([Filter(authors="04c915daefee38317fa734444acee390a8269fe5810b2241e5e6dd343dfbecc9", kinds=[EventKind.TEXT_NOTE])])
timestamp = round(time.time()-1000)
#filters = Filters([Filter(authors="04c915daefee38317fa734444acee390a8269fe5810b2241e5e6dd343dfbecc9", kinds=[9735], since=timestamp)])
filters = Filters([Filter(kinds=[9735], since=timestamp)])
subscription_id = "ihopethisworks2" + str(time.time())
request = [ClientMessageType.REQUEST, subscription_id]
json.dumps(request)
request.extend(filters.to_json_array())
message = json.dumps(request)
# ["REQ", "ihopethisworks3", {"kinds": [1], "authors": "04c915daefee38317fa734444acee390a8269fe5810b2241e5e6dd343dfbecc9"}]
print(f"sending this: {message}")
relay_manager = RelayManager()
#relay_manager.add_relay("wss://nostr-pub.wellorder.net")
relay_manager.add_relay("wss://relay.damus.io")
relay_manager.add_subscription(subscription_id, filters)
time.sleep(2) # allow the connections to open
print("opening connections")
relay_manager.open_connections({"cert_reqs": ssl.CERT_NONE}) # NOTE: This disables ssl certificate verification
time.sleep(2) # allow the connections to open
print("publishing:")
relay_manager.publish_message(message)
time.sleep(1) # allow the messages to send
print("printing events:")
#while relay_manager.message_pool.has_events():
for _ in range(60):
time.sleep(1)
print(".")
try:
event_msg = relay_manager.message_pool.get_event()
print(event_msg.event.content)
except Exception as e:
print(f"pool.get_event() got error: {e}")
print("closing:")
relay_manager.close_connections()
+20 -13
View File
@@ -1,16 +1,23 @@
from websocket import WebSocketApp import json
import ssl
import time
from nostr.event import Event
from nostr.relay_manager import RelayManager
from nostr.message_type import ClientMessageType
from nostr.key import PrivateKey
def on_message(ws, message): relay_manager = RelayManager()
print(f"Received: {message}") relay_manager.add_relay("wss://nostr-pub.wellorder.net")
relay_manager.add_relay("wss://relay.damus.io")
relay_manager.open_connections({"cert_reqs": ssl.CERT_NONE}) # NOTE: This disables ssl certificate verification
time.sleep(5) # allow the connections to open
def on_open(ws): private_key = PrivateKey()
ws.send_text("Hello, Nostr!")
ws = WebSocketApp( event = Event("Hello Nostr")
url="wss://relay.damus.io", private_key.sign_event(event)
on_open=on_open,
on_message=on_message, relay_manager.publish_event(event)
on_error=lambda ws, e: print(f"Error: {e}"), time.sleep(1) # allow the messages to send
on_close=lambda ws, code, reason: print("Closed")
) relay_manager.close_connections()
ws.run_forever(ping_interval=30, ping_timeout=10)
@@ -0,0 +1,68 @@
import websocket
import _thread
import time
def on_message(wsapp, message):
print(f"got message: {message}")
def on_ping(wsapp, message):
print("Got a ping! A pong reply has already been automatically sent.")
def on_pong(wsapp, message):
print("Got a pong! No need to respond")
def on_error(wsapp, message):
print(f"Got error: {message}")
#wsapp = websocket.WebSocketApp("wss://testnet.binance.vision/ws/btcusdt@trade", on_message=on_message, on_ping=on_ping, on_pong=on_pong, on_error=on_error)
#wsapp = websocket.WebSocketApp("wss://echo.websocket.events", on_message=on_message, on_ping=on_ping, on_pong=on_pong, on_error=on_error)
wsapp = websocket.WebSocketApp("wss://relay.damus.io", on_message=on_message, on_ping=on_ping, on_pong=on_pong, on_error=on_error)
#wsapp = websocket.WebSocketApp("wss://relay.primal.net", on_message=on_message, on_ping=on_ping, on_pong=on_pong, on_error=on_error)
def stress_test_thread():
print("before run_forever")
#wsapp.run_forever(ping_interval=30, ping_timeout=10)
#wsapp.run_forever(ping_interval=300, ping_timeout=10, ping_payload="This is an optional ping payload")
wsapp.run_forever()
print("after run_forever")
_thread.stack_size(32*1024)
_thread.start_new_thread(stress_test_thread, ())
time.sleep(5)
print("sending it")
# nothing:
#wsapp.send_text('["REQ", "ihopethisworks3", {"kinds": [1], "authors": "04c915daefee38317fa734444acee390a8269fe5810b2241e5e6dd343dfbecc9"}]')
#wsapp.send_text('["REQ", "ihopethisworks3", {"kinds": [1] }]')
# this worked at some point:
#wsapp.send_text('["REQ","index3",{"kinds":[9735]}]')
#wsapp.send_text('["REQ","index3",{"kinds":[9735], "since": 1745086888}]')
tosend = '["REQ","index3",{"kinds":[9735], "since": '
tosend += str(round(time.time()-1000))
tosend += '}]'
print(f"sending: {tosend}")
wsapp.send_text(tosend)
#1745086888
#["REQ","index",{"kinds":[9735]}]
print("waiting 30 seconds...")
time.sleep(30)
#print("sending again")
#wsapp.send_text('again')
time.sleep(25)
#print("sending more")
#wsapp.send_text('more')
wsapp.close()
@@ -0,0 +1,57 @@
import websocket
import _thread
import time
def on_message(wsapp, message):
print(f"got message: {message}")
def on_ping(wsapp, message):
print("Got a ping! A pong reply has already been automatically sent.")
def on_pong(wsapp, message):
print("Got a pong! No need to respond")
def on_error(wsapp, message):
print(f"Got error: {message}")
#wsapp = websocket.WebSocketApp("wss://testnet.binance.vision/ws/btcusdt@trade", on_message=on_message, on_ping=on_ping, on_pong=on_pong, on_error=on_error)
#wsapp = websocket.WebSocketApp("wss://echo.websocket.events", on_message=on_message, on_ping=on_ping, on_pong=on_pong, on_error=on_error)
wsapp = websocket.WebSocketApp("wss://relay.damus.io", on_message=on_message, on_ping=on_ping, on_pong=on_pong, on_error=on_error)
#wsapp = websocket.WebSocketApp("wss://relay.primal.net", on_message=on_message, on_ping=on_ping, on_pong=on_pong, on_error=on_error)
def stress_test_thread():
print("before run_forever")
#wsapp.run_forever(ping_interval=30, ping_timeout=10)
wsapp.run_forever(ping_interval=30, ping_timeout=10, ping_payload="This is an optional ping payload")
print("after run_forever")
_thread.stack_size(32*1024)
_thread.start_new_thread(stress_test_thread, ())
time.sleep(5)
print("sending it")
#wsapp.send_text('["REQ", "ihopethisworks3", {"kinds": [1], "authors": "04c915daefee38317fa734444acee390a8269fe5810b2241e5e6dd343dfbecc9"}]')
#wsapp.send_text('["REQ", "ihopethisworks3", {"kinds": [1] }]')
wsapp.send_text('["REQ","index2",{"kinds":[9735]}]')
#["REQ","index",{"kinds":[9735]}]
time.sleep(15)
print("sending again")
wsapp.send_text('again')
time.sleep(25)
print("sending more")
wsapp.send_text('more')
wsapp.close()
@@ -0,0 +1,68 @@
import websocket
import _thread
import time
def on_message(wsapp, message):
print(f"got message: {message}")
def on_ping(wsapp, message):
print("Got a ping! A pong reply has already been automatically sent.")
def on_pong(wsapp, message):
print("Got a pong! No need to respond")
def on_error(wsapp, message):
print(f"Got error: {message}")
#wsapp = websocket.WebSocketApp("wss://testnet.binance.vision/ws/btcusdt@trade", on_message=on_message, on_ping=on_ping, on_pong=on_pong, on_error=on_error)
#wsapp = websocket.WebSocketApp("wss://echo.websocket.events", on_message=on_message, on_ping=on_ping, on_pong=on_pong, on_error=on_error)
wsapp = websocket.WebSocketApp("wss://relay.damus.io", on_message=on_message, on_ping=on_ping, on_pong=on_pong, on_error=on_error)
#wsapp = websocket.WebSocketApp("wss://relay.primal.net", on_message=on_message, on_ping=on_ping, on_pong=on_pong, on_error=on_error)
def stress_test_thread():
print("before run_forever")
#wsapp.run_forever(ping_interval=30, ping_timeout=10)
#wsapp.run_forever(ping_interval=300, ping_timeout=10, ping_payload="This is an optional ping payload")
wsapp.run_forever()
print("after run_forever")
_thread.stack_size(32*1024)
_thread.start_new_thread(stress_test_thread, ())
time.sleep(5)
print("sending it")
# nothing:
#wsapp.send_text('["REQ", "ihopethisworks3", {"kinds": [1], "authors": "04c915daefee38317fa734444acee390a8269fe5810b2241e5e6dd343dfbecc9"}]')
#wsapp.send_text('["REQ", "ihopethisworks3", {"kinds": [1] }]')
# this worked at some point:
#wsapp.send_text('["REQ","index3",{"kinds":[9735]}]')
#wsapp.send_text('["REQ","index3",{"kinds":[9735], "since": 1745086888}]')
tosend = '["REQ","index3",{"kinds":[9735], "since": '
tosend += str(round(time.time()-1000))
tosend += '}]'
print(f"sending: {tosend}")
wsapp.send_text(tosend)
#1745086888
#["REQ","index",{"kinds":[9735]}]
print("waiting 30 seconds...")
time.sleep(30)
#print("sending again")
#wsapp.send_text('again')
time.sleep(25)
#print("sending more")
#wsapp.send_text('more')
wsapp.close()