将 NodeMCU Lua 套接字客户端与 node.js socket.io 服务器连接

Connecting NodeMCU Lua socket client with node.js socket.io server

我想将 NodeMCU Lua 套接字客户端连接到 node.js socket.io 服务器。

NodeMCU Lua代码:

sk = net.createConnection(net.TCP, 0)
sk:on("receive", function ( sck,c )
    print (c)
end)

sk:on("connection", function ( sck,c )
    print("Connected")
    sk:send("Helloooo...")
end)
sk:connect(12346,"192.168.1.100")

Node.js 服务器代码:

var express = require('express');
var app = express();
var server = require('http').Server(app);
var io = require('socket.io')(server);
io.on('connection', function(socket){
    console.log('someone is connected');
});
server.listen(12346);

问题:

Lua 客户端中的 on connection 事件被触发并打印 "Connected",但 node.js socket.io 服务器中的 on connection 事件未被触发。我用 Python 套接字服务器尝试了 Lua 客户端,它运行良好!我还尝试了一个 node.js 套接字服务器和一个 Javascript 套接字客户端,它运行良好!

NodeMCU 和 socket.io 之间是否存在兼容性问题?

Socket.io is a WebSocket 包装器,不是基本的套接字实现。里面有握手、心跳等一些具体的操作。因此,您可以使用套接字服务器取得成功,但不能使用 WebSocket 服务器。

您也可以在 NodeMCU 端使用 WebSocket 客户端实现。但我不确定 Lua 库是否与 WebSocket API 版本匹配。

如果您想要异步通信,您可以使用MQTT, which has also lots of libraries for NodeJS. Otherwise use the socket server of NodeJS,就像您之前成功完成的那样。