SocketCAN + Express.js + Node.js + Socket.io
SocketCAN + Express.js + Node.js + Socket.io
所以我已经安装了 SocketCAN、Express 和 Socket.io 节点模块。
我想做的是:
*在 Express 服务器上通过 Socket.io 初始化套接字
*在服务器上使用 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 发送 can 消息时:cansend vcan0 37F#0000000012343412
我只会看到我的 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
日志。
如有任何帮助,我们将不胜感激
提前致谢。
好吧,我想通了。
我必须 io.emit() 在 socket.emit 中 socket.io 在服务器上:
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);
});
}
提供的代码是简约的,只需在开发者控制台中登录数据。
所以我已经安装了 SocketCAN、Express 和 Socket.io 节点模块。
我想做的是: *在 Express 服务器上通过 Socket.io 初始化套接字 *在服务器上使用 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 发送 can 消息时:cansend vcan0 37F#0000000012343412
我只会看到我的 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
日志。
如有任何帮助,我们将不胜感激
提前致谢。
好吧,我想通了。
我必须 io.emit() 在 socket.emit 中 socket.io 在服务器上:
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);
});
}
提供的代码是简约的,只需在开发者控制台中登录数据。