连接 NodeMCU Lua Socket 客户端与 node.js Socket.io 服务器

我想将一个 NodeMCU Lua Socket 客户端连接到 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 Socket 服务器与 Lua 客户端配对,结果工作正常!我也试过使用 node.js Socket 服务器和 Javascript Socket 客户端,结果同样工作正常!

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

点赞
用户3082873
用户3082873

Socket.io 是一个 WebSocket 的封装,而不是基本的 socket 实现。其中有一些特定的操作,例如握手和心跳。因此,你可以成功地连接到 socket 服务器,但不是 WebSocket 服务器。

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

如果你想要异步通信,可以使用 MQTT,它也有很多适用于 NodeJS 的库。否则,像你之前成功地做过的那样,使用 NodeJS 的 socket 服务器。

2016-12-30 05:19:19