Я совсем новичок в NodeJS разработке и создании сетей. Я искал много подобных вопросов здесь, но не смог найти простого решения.
Я хотел бы создать сервер, который мог бы устанавливать соединения TCP (сокет) с GPS-часами, а также получать HTTP-запросы из других источников, например, из мобильного приложения.
Текущий код, который позволяет мне общаться с часами через сокетное соединение (с модулем net):
const net = require('net')
const server = net.createServer()
const port = 8001
server.on('connection', (socket) => {
console.log('Connection opened')
socket.on('data', (chunk) => {
console.log(chunk.toString())
})
socket.on('error', (err) => {
console.log(err)
})
})
server.listen(port, () => {
console.log('Server running on port ' + port)
})
В идеальном мире я хотел бы использовать express для обработки HTTP-запросов. Я пытался (на этот раз с модулем http):
const http = require('http')
const express = require('express')
const app = express()
const server = http.createServer(app)
var port = 8001
app.get('/', (req, res) => {
res.send('Get Request Working')
})
server.on('connection', (socket) => {
console.log('Connection opened')
socket.on('data', (chunk) => {
console.log(chunk.toString())
})
socket.on('error', (err) => {
console.log(err)
})
})
server.listen(port, () => {
console.log('Server running on port ' + port)
})
Мой запрос на получение работает отлично, сокеты также работают (я вижу журнал подключений и журнал данных), но при получении данных я получаю следующая ошибка:
Connection opened
[3G*1204761865*0009*LK,0,0,90]
Error: Parse Error: Invalid method encountered
at socketOnData (_http_server.js:563:22)
at Socket.emit (events.js:323:22)
at addChunk (_stream_readable.js:294:12)
at readableAddChunk (_stream_readable.js:275:11)
at Socket.Readable.push (_stream_readable.js:209:10)
at TCP.onStreamRead (internal/stream_base_commons.js:186:23) {
bytesParsed: 0,
code: 'HPE_INVALID_METHOD',
reason: 'Invalid method encountered',
rawPacket: <Buffer 5b 33 47 2a 31 32 30 34 37 36 31 38 36 35 2a 30 30 30 39 2a 4c 4b 2c 30 2c 30 2c 39 30 5d>
}
Я пробовал много вещей, гуглил 2 дня подряд, но не смог найти решение. Любые советы или рекомендации были бы полезны.
Я также пробовал с библиотекой socket.io, но я думаю, что она работает, только если она реализована на сервере и на стороне клиента. Я не могу изменить протокол связи часов.
С уважением, L