websocket
Асинхронный WebSocket клиент. 3 канонические функции, single-word verb форма (PascalCase + lowercase).
| Функций | 3 (6 с алиасами) |
| Проверено вживую | 3 из 3 (сигнатуры + onError event наблюдае мы; полный roundtrip сообщения не достигнут в нашем прогоне, см. ниже) |
| Требуемый event | нет для самого вызова, callback'и срабатывают позже на IO-потоке чита |
| Сайд-эффекты | открывает исходящее TCP/TLS соединение с IP пользователя, держит открытым до Close |
Алиасы. Two-form (PascalCase + lowercase):
websocket.Connect/websocket.connectи т.д. См. Обзор / Конвенция именования.
Callback таблица использует camelCase. Проверено вживую: только ключи
onMessage/onOpen/onClose/onErrorдиспатчатся. PascalCase (OnError) и snake_case (on_error) таблицы зарегистрированные на том же соединении получили ноль событий.
Краткий справочник
| Функция | Сигнатура | Заметка | Статус |
|---|---|---|---|
Connect | (url: string, callbacks: table) → id: number | оба аргумента обязательны, возвращает sequential numeric id даже на bad URL (failure через async onError) | проверено |
Send | (id: number, data: string) | оба обязательны, succeeds (возвращает nil) независимо от того открыто ли соединение | проверено |
Close | (id: number) | silently no-ops на unknown ids, возвращает nil | проверено |
Callback таблица
Передай таблицу именованных функций как второй аргумент Connect. Чит ищет ключи только в camelCase:
| Ключ | Когда срабатывает | Аргумент |
|---|---|---|
onOpen | когда соединение установлено | не задокументирован |
onMessage | когда сервер шлёт сообщение | данные сообщения как строка (сигнатура inferred, не roundtripped в нашем прогоне) |
onClose | когда соединение завершилось чисто | не задокументирован |
onError | ко гда соединение не установилось или прервалось аномально | строка ошибки (проверено: "Underlying Transport Error" доставлен в onError(msg)) |
Проверено регистрацией одного соединения с тремя callback-таблицами в стилях PascalCase, camelCase и snake_case. Только camelCase-таблица получила onError событие. PascalCase и snake_case получили ничего.
local function on_open() print("ws connected") end
local function on_message(msg) print("ws got:", msg) end
local function on_close() print("ws closed") end
local function on_error(err) print("ws error:", err) end
local id = websocket.Connect("wss://echo.example.com", {
onOpen = on_open,
onMessage = on_message,
onClose = on_close,
onError = on_error,
})
Connect
websocket.Connect(url: string, callbacks: table) → id: number
Открывает WebSocket соединение с url. Оба аргумента обязательны. Возвращает numeric id используемый для адресации соединения в Send и Close.
Id назначается последовательно читом. В нашем прогоне четыре Connect вызова вернули 1, 2, 3, 4.
Проверенная валидация:
| Вызов | Результат |
|---|---|
Connect() | "bad argument #1 to '?' (string expected, got no value)" |
Connect("wss://...") | "bad argument #2 to '?' (table expected, got no value)" |
Connect("wss://invalid-host.invalid", {}) | sync ok = true, возвращает id 1. Async: onError("Underlying Transport Error") срабатывает позже |
Сетевая ошибка всегда асинхронна. Connect возвращает id даже если URL недостижим; failure доставляется через onError.