Using Socket.io and Matlab



我在localhost 上设置了一个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是一个相对高级的库,通过向多个网络套接字等进行广播,为网络提供了很多功能。值得注意的是,socket.io默认情况下甚至不使用网络套接字,它根据可用性"升级"到网络套接字,同时能够回退到较旧的解决方案,如长轮询(https://en.wikipedia.org/wiki/Socket.IO)。Websockets本身是一个很可能通过tcp/ip协议实现的协议,但除非您专门实现socket.io对Websockets的使用,否则matlab中的tcp/ip函数不可能与socket.io通信。即使你可以,这也会很混乱,而且工作量远远超过它的价值。

对于matlab和node之间的通信,我的建议是根据您的预期用途,坚持使用tcp/ip协议或websockets协议。Matlab通过外部代码具有websockets兼容性(https://www.mathworks.com/matlabcentral/fileexchange/50040-jebej-matlabwebsocket),node的npm将为您提供通过tcp/ip或websocket进行通信的模块。

相关内容

  • 没有找到相关文章

最新更新