【问题标题】:SocketCAN + Express.js + Node.js + Socket.ioSocketCAN + Express.js + Node.js + Socket.io
【发布时间】:2018-10-22 09:32:42
【问题描述】:

所以我已经安装了 SocketCAN、Express 和 Socket.io 节点模块。

我想做的是: *在 Express 服务器上通过 Socket.io 初始化一个 Socket *使用服务器上的socketCAN“node-can”模块将消息发送到我的前端(Angular6)

到目前为止我做了什么:

*创建一个 Express 服务器并在那里初始化 Socket.io 和 node-can *能够在我的应用程序中连接到我的套接字

这是实现此目的的代码:

    const express = require('express');
    const path = require('path');
    const http = require('http');
    const socketIO = require('socket.io');
    var can = require('socketcan');

    var channel = can.createRawChannel("vcan0", true);

    channel.start();

    const app = express();
    const port = process.env.PORT || 3000;

    app.use(express.static(path.join(__dirname, 'dist/akkaDiagTool')));

    app.get('*', (req, res) => {
      res.sendFile(path.join(__dirname, 'dist/akkaDiagTool/index.html'));
    });

    const server = http.createServer(app);

    const io = socketIO(server);

    io.on('connection', (socket) => {
      console.log('socket connected');

     socket.on('can message', (from, msg) => {
        msg.channel.addListener("onMessage", function(data) {console.log(data);});
        console.log('Recieved message by', from , 'sayin ', msg);
      });

  socket.on('disconnected', (socket) => {
    console.log('socket disconnected');
  })
})
server.listen(port, () => {
  console.log(`Server running on port ${port}`)
})

所以当我启动我的应用程序并使用 socketcan:cansend vcan0 37F#0000000012343412 发送 can 消息时 我只会看到我的msg.channel.addListener("onMessage", function(data) {console.log(data);});的日志

但不是console.log('Recieved message by', from , 'sayin ', msg); 日志

我的 Angular 组件如下所示:

import { Component, OnInit } from '@angular/core';
import * as io from 'socket.io-client';

@Component({
.
.
.
})
export class StaticDataComponent implements OnInit {
  socket;

  constructor() {
    this.socket = io();
    this.socket.on('can message', (data) => {
      console.log(data);
    });
  }

应该连接套接字,因为我在控制台中获得了socket connected 登录。

任何帮助将不胜感激

提前致谢。

【问题讨论】:

    标签: node.js sockets express socket.io socketcan


    【解决方案1】:

    好吧,我设法弄明白了。

    我必须在服务器上的 socket.emit 和 socket.io 中使用 io.emit():

    io.on('connection', (socket) => {
      //create canChannel with socketcan(node-can)
      var channel = can.createRawChannel('vcan0', true);
    
      //emit messagees to the *can message* listening to the canChannel
      socket.emit('can message', channel.addListener('onMessage', (data) => {
        io.emit('can message', data);
      }));
    
      channel.start();
      //disconnect
      socket.on('disconnected', (socket) => {
        console.log('socket disconnected');
      });
    

    这里是 Angular 组件中的代码:

    constructor() {
        this.socket = io();
        this.socket.on('can message', (msg) => {
          console.log('data', msg);
        });
      }
    

    提供的代码很简约,只需在开发者控制台中登录数据即可。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多