如何用nodejs接收GPS发送的数据,并实时返回前台页面

我的需求是这样的:
1、通过GPS向一个固定IP下的某一个端口发送实时坐标信息。
2、用nodejs写一个后台,获取GPS发送的坐标信息。
3、使用nodejs中的socket.io包结合html5的websocket把数据实时的返回到前台页面,然后再在前台页面展示GPS数据。

开发环境:
使用TCP/UDP Socket调试工具模拟GPS发送数据;
Visual Studio Code 开发;

目前我遇到的问题:
1、获取GPS数据后,使用socket.io把数据发送到前台后都是undefined。
2、我把接收数据和向前台发送数据写在一共页面中是否可以这样写?
3、我的代码逻辑有没有问题?

使用TCP/UDP Socket调试工具模拟GPS发送数据:
clipboard.png

nodejs后台可以接受到发送的数据:
clipboard.png

前台页面展示数据:

clipboard.png

系统后台:

clipboard.png

//接受gps发送的数据
var net = require('net');
var HOST = 'localhost';
var DataPORT = 1000;
var GPSData="";
var server = net.createServer(function (socket){

    server.on('connection', function(sock) {
        console.log('GPS接收端口已连接: ' + String(sock.remoteAddress) +':'+ String(sock.remotePort));
    });

    socket.on('data', function(data) {
        var response = data.toString().trim();
        console.log(String(response));
        GPSData=String(response);
        io.emit('message', String(response));

        // if (/disconnect/.test(response)) {
        //     console.log("Client is diconnecting.");
        //     socket.end('Disconnecting you now.\r\n');
        // } 
    });

    socket.on('end', function() {
        console.log('GPS接收端口已关闭!');
    });

});

server.listen(DataPORT,function(){
    console.log("服务器已启动数据接收端口,端口号为:" + DataPORT);
});




//向前端页面发送接收到的gps数据
var app = require('express')();
var http = require('http').Server(app);
var messagePort=3000;
var io = require('socket.io')(http);

app.get('/', function(req, res){
    res.send('<h1>Welcome Realtime Server</h1>');
});

//在线用户
var onlineUsers = {};
//当前在线人数
var onlineCount = 0;

io.on('connection', function(socket){
    console.log('a user connected');
    
    //监听新用户加入
    socket.on('login', function(obj){
        //将新加入用户的唯一标识当作socket的名称,后面退出的时候会用到
        socket.name = obj.userid;
        
        //检查在线列表,如果不在里面就加入
        if(!onlineUsers.hasOwnProperty(obj.userid)) {
            onlineUsers[obj.userid] = obj.username;
            //在线人数+1
            onlineCount++;
        }
        
        //向所有客户端广播用户加入
        io.emit('login', {onlineUsers:onlineUsers, onlineCount:onlineCount, user:obj});
        console.log(obj.username+'加入了聊天室');
    });
    
    //监听用户退出
    socket.on('disconnect', function(){
        //将退出的用户从在线列表中删除
        if(onlineUsers.hasOwnProperty(socket.name)) {
            //退出用户的信息
            var obj = {userid:socket.name, username:onlineUsers[socket.name]};
            
            //删除
            delete onlineUsers[socket.name];
            //在线人数-1
            onlineCount--;
            
            //向所有客户端广播用户退出
            io.emit('logout', {onlineUsers:onlineUsers, onlineCount:onlineCount, user:obj});
            console.log(obj.username+'退出了聊天室');
        }
    });
    
    //监听用户发布聊天内容
    socket.on('message', function(obj){
        //向所有客户端广播发布的消息
        io.emit('message', GPSData);
        console.log(obj.username+'说:'+obj.content);
    });
  
});

http.listen(3000, function(){
    console.log('服务器已启动websocket端口,端口号为:' + messagePort);
});
阅读 5.9k
1 个回答

你把你接受到的东西,替换成一个常量,看看输入过去有值吗?

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题