我设置了 socket.io本地主机上的服务器(nodejs)
var io = require('socket.io').listen(8000);
io.sockets.on('connection', function (socket) {
setInterval(function(){
socket.emit("updatedPrice", 100.3);
},2000);
});
我已经在我的浏览器上对此进行了测试,它可以正常工作。
但是,如果我无法读取 Matlab 上的数据
>> tcpipClient = tcpip('localhost',8000,'NetworkRole','Client')
TCPIP Object : TCPIP-localhost
Communication Settings
RemotePort: 8000
RemoteHost: localhost
Terminator: 'LF'
NetworkRole: client
Communication State
Status: closed
RecordStatus: off
Read/Write State
TransferStatus: idle
BytesAvailable: 0
ValuesReceived: 0
ValuesSent: 0
>> set(tcpipClient,'InputBufferSize',7688);
>> set(tcpipClient,'Timeout',30);
>> fopen(tcpipClient);
>> rawData = fread(tcpipClient,961,'double');
Warning: Unsuccessful read: The specified amount of data was not returned
within the Timeout period.
最佳答案
这可能会复活一个老问题,但这是我一开始不明白的事情,所以希望它对其他人有帮助。
当你说“我已经在我的浏览器上测试了它并且它工作正常”时,我假设你使用了客户端 socket.io 库。这就是 socket.io 的运作方式,据我所知,这是它运作的唯一方式。这是因为 socket.io 是一个相对高级的库,它通过广播到多个 websocket 等为 web 提供了很多功能。值得注意的是,socket.io 默认情况下甚至不使用 websocket,它“升级”到它们基于可用性,同时能够回退到旧的解决方案,如长轮询 (https://en.wikipedia.org/wiki/Socket.IO)。 Websockets 是一种协议(protocol),它本身很可能是通过 tcp/ip 协议(protocol)实现的,但是除非您专门实现 socket.io 对 websockets 的使用,否则 matlab 中的 tcp/ip 函数无法与 socket.io 通信。即使你可以,它也会很困惑,而且工作量远远超过它的值(value)。
我对 matlab 和 node 之间通信的建议是根据您的预期用途坚持使用 tcp/ip 协议(protocol)或 websockets 协议(protocol)。 Matlab 通过外部代码 (https://www.mathworks.com/matlabcentral/fileexchange/50040-jebej-matlabwebsocket) 具有 websockets 兼容性,并且 node 的 npm 将为您提供通过 tcp/ip 或 websockets 进行通信的模块。
关于matlab - 使用 Socket.io 和 Matlab,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23089437/