完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
我想使用 NodeMCU 作为 1 个或多个浏览器客户端的 websocket
。 幸运的是,这里有代码可以做到这一点: https: (由@creationix 和/或@moononournation 提供) 这按描述工作并且我能够将消息从客户端发送到 NodeMCU 服务器,然后服务器根据接收到的消息进行响应。伟大的。 我的问题是: 1:如何向客户端发送消息而不必将其作为对客户端请求的响应(独立发送数据)发送?当我尝试调用 时,找不到作为变量的套接字,我明白这一点,但不知道该怎么做! 也许是因为 是在本地声明的? 2:为什么 函数会输出 变量?这个是来做什么的?我假设它是因为数据包溢出,但无论我的消息长度如何,我似乎永远无法让它返回任何东西。 3:在listen方法中,为什么作者加了一个排队系统?这是必不可少的还是对于可能会同时接收多个消息的应用程序?理想情况下,我想删除它。 我已将代码简化如下:( 不包括 和 函数 - 请参阅上面的链接以获取完整脚本) 代码:全选net.createServer(net.TCP):listen(80, function(conn) local buffer = false local socket = {} local queue = {} local waiting = false local function onSend() if queue[1] then local data = table.remove(queue, 1) return conn:send(data, onSend) end waiting = false end function socket.send(...) local data = encode(...) if not waiting then waiting = true conn:send(data, onSend) else queue[#queue + 1] = data end end conn:on("receive", function(_, chunk) if buffer then buffer = buffer .. chunk while true do local extra, payload, opcode = decode(buffer) if opcode==8 then print("Websocket client disconnected") end --print(type(extra), payload, opcode) if not extra then return end buffer = extra socket.onmessage(payload, opcode) end end local _, e, method = string.find(chunk, "([A-Z]+) /[^\r]* HTTP/%d%.%d\r\n") local key, name, value for name, value in string.gmatch(chunk, "([^ ]+): *([^\r]+)\r\n") do if string.lower(name) == "sec-websocket-key" then key = value break end end if method == "GET" and key then acceptkey=crypto.toBase64(crypto.hash("sha1", key.."258EAFA5-E914-47DA-95CA-C5AB0DC85B11")) conn:send( "HTTP/1.1 101 Switching Protocols\r\n".. "Upgrade: websocket\r\nConnection: Upgrade\r\n".. "Sec-WebSocket-Accept: "..acceptkey.."\r\n\r\n", function () print("New websocket client connected") function socket.onmessage(payload,opcode) socket.send("GOT YOUR DATA", 1) print("PAYLOAD = "..payload) --print("OPCODE = "..opcode) end end) buffer = "" else conn:send( "HTTP/1.1 200 OK\r\nContent-Type: text/plain\r\nContent-Length: 12\r\n\r\nHello World!", conn.close) end end) end) |
|
相关推荐
|
|
只有小组成员才能发言,加入小组>>
1138 浏览 1 评论
576浏览 6评论
477浏览 5评论
有没有办法在不使用混杂模式的情况下实现Wifi驱动程序接收缓冲区访问中断呢?
461浏览 5评论
462浏览 4评论
435浏览 4评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-22 12:23 , Processed in 0.676747 second(s), Total 44, Slave 37 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号