首页 > 解决方案 > 使用 Socket.io 从 NodeJS 获取数据到 Dart/Flutter

问题描述

我正在尝试从 NodeJS 获取数据,但我不知道如何做到这一点,有人可以帮助我吗?本例使用的包有:import 'dart:async' 和 import 'package:socket_io_client/socket_io_client.dart';

testSocket.dart

 void testSocket(socket) async {
  Socket socket;
  try {
    // Configure socket transports must be sepecified
    socket = io('http://127.0.0.1:3000', <String, dynamic>{
      'transports': ['websocket'],
    });
    // Connect to websocket
    socket.connect();
    // THIS IS WHERE I WANT TO PRINT THE DATA THAT WE GOT RECIEVED FROM NODEJS
    socket.on('event', (data) => print(data));

  } 
  print("connected: ${socket.connected}");
}

index.js

    const server = require('http').createServer()

   const io = require('socket.io')(server)

io.on('connection', function (client) {
  client.on('event', function name(data) {
    data = "test";
    // Send data somehow to Flutter
    io.on();
  });
});

// The live server
var server_port = process.env.PORT || 3000;
server.listen(server_port, function (err) {
  if (err) throw err
  console.log('Listening on port %d', server_port);
});

我真的很感激你花时间帮助我!

标签: node.jsfluttersocketsdart

解决方案


您必须从服务器发出事件,并且您的客户端必须订阅这些相同的事件才能接收数据和更新。

testSocket.dart

void testSocket(socket) async {
  Socket socket;
  try {
    socket = io('http://127.0.0.1:3000', <String, dynamic>{
      'transports': ['websocket'],
    });
    socket.connect();
    socket.on('testEvent', (data) => print(data));
  } 
  print("connected: ${socket.connected}");
}

然后你的服务器必须发出testEvent一些数据。

index.js

const server = require('http').createServer()
const io = require('socket.io')(server)

io.on('connection', function (client) {
  client.on('event', function name(data) {
    data = "test";
    client.emit('testEvent', data);
  });
});

var server_port = process.env.PORT || 3000;
server.listen(server_port, function (err) {
  if (err) throw err
  console.log('Listening on port %d', server_port);
});

现在,由于我们只触发一次性事件,因此数据只会出现一次。您必须发出相同的事件才能让客户端接收更新。


推荐阅读